Не пойму как толком работает QPainter. Поэтому вот элементарный код который я тестил:
#include <QtGui/QApplication>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *b = new QWidget; //Создаю QWidget
QPainter *painter = new QPainter(*b); //создаю QPainter, передаю ему указатель на QWidget.
painter->drawLine(10, 10, 300, 300); //рисую линию
b->show();
b->repaint();
return a.exec();
Потому-что рисование осуществляется не в произвольном месте программы, а в обработчике события рисования QWidget::paintEvent.
Что приведено в элементарном примере из http://doc.crossplatform.ru/qt/4.5.0/qpainter.html#details:
Да, спасибо, уже разобрался.
Короче придется наследовать класс, в нем переопределять QPaintEvent, потом создавать его динамически...
Поначитал тут столько извращений, типа как рисовать на дочернем виджете из родительского окна: перехватывать сообщения, вызывать отрисовку потомка, потом рисовать поверх. У меня все равно почему-то не заработало, но это ладно - от такого подхода я уже отказался.
Буду либо переопределять, либо рисовать на QGraphicsView с помошью QPainterPath, QGraphicsScene.
А эту тему можно закрыть и даже удалить лучше, - чтобы те, кто будет искать ответы на вопросы подобные моим в этой теме не спотыкались.)
Хотя у меня че-то не работает даже примитивный код.
Тут я пытаюсь унаследовать от создать класс DrawWidget унаследовав его от QGraphicWidget переопределив в нем paintEvent и отрисовать в нем что нибудь.
Вот такой код. Почему не отрисовывается?
#ifndef DRAWWIDGET_H
#define DRAWWIDGET_H
#include <QtGui>
class DrawWidget : public QGraphicsView{
public:
DrawWidget(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent *event);
private:
};
#endif // DRAWWIDGET_H
drawwidget.cpp
#include "DrawWidget.h"
#include <QtGui>
DrawWidget::DrawWidget(QWidget* parent):
QGraphicsView(parent)
{
}
void DrawWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(10, 10, 40, 50);
}
#include <QtGui/QApplication>
#include "dialog.h"
#include "DrawWidget.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget pWidget;
DrawWidget pView(&pWidget);
QVBoxLayout pLayout;
pLayout.addWidget(&pView);
pView.show();
pWidget.setLayout(&pLayout);
pWidget.show();
return a.exec();
}
class DrawWidget : public QGraphicsView
ты что-то вообще не то делаешь.
В Qt есть два способа рисования: http://doc.crossplatform.ru/qt/4.7.x/qt4-arthur.html (рисование в paintEvent виджета), и http://doc.crossplatform.ru/qt/4.7.x/graphicsview.html (создание элементов на сцене и отображение их в представлении).
блин, унаследовался от QWidget и тогда только нарисовалось.
Но почему нельзя чтобы рисовалось на виджете наследованном от QGraphicsView?
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)