Архитектура приложения такова - есть главное окно, туда накидано несколько контролов, один из которых - мой WorkArea (как я его назвал), унаследованный от QGraphicsView:
workarea.h:
#include <QtGui/QGraphicsView>
class QPaintEvent;
class QGraphicsView;
class WorkArea : public QGraphicsView
{
Q_OBJECT
public:
WorkArea(QWidget *parent = 0);
protected:
void paintEvent(QPaintEvent *event);
}
Мне нужно рисовать в нем. Для этого прямо в классе WorkArea я определил обработчик paint, все кошерно, чики-пики:
workarea.cpp:
#include <QtGui/QPaintEvent>
#include "qpainter.h"
#include "workarea.h"
WorkArea::WorkArea(QWidget *parent) : QGraphicsView(parent)
{
}
void WorkArea::paintEvent(QPaintEvent *event)
{
QPainter p;
p.begin(this);
p.setRenderHint(QPainter::Antialiasing, true);
p.setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
p.setBrush(QBrush(Qt::green, Qt::SolidPattern));
p.drawEllipse(40, 40, 200, 120);
p.drawLine(0,0,100,100);
p.end();
}
Подключение контрола в главном окне:
MainWindow::MainWindow()
{
... бла-бла-бла
grView = new WorkArea(this);
grView->setFrameStyle(QFrame::NoFrame | QFrame::Plain);
...
}
(grView - объект, объявленный как: WorkArea *grView;)
При запуске paint срабатывает, однако ничего не рисует, при этом выдавая в консоль:
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::setPen: Painter not active
QPainter::setBrush: Painter not active
QPainter::end: Painter not active, abortedНаверное, я забыл сказать какое-то магическое заклинание...
Заранее благодарю за правильный ответ!