Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: VladGuardian от Ноябрь 03, 2009, 21:38



Название: Неактивированный QPainter - "QPainter::setPen: Painter not active" (РЕШЕНА)
Отправлено: VladGuardian от Ноябрь 03, 2009, 21:38
Архитектура приложения такова - есть главное окно, туда накидано несколько контролов, один из которых - мой 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

Наверное, я забыл сказать какое-то магическое заклинание...  >:(

Заранее благодарю за правильный ответ!


Название: Re: Неактивированный QPainter - "QPainter::setPen: Painter not active"
Отправлено: _OLEGator_ от Ноябрь 03, 2009, 22:36
не понятно, что в самом конце делает update()?! он же вроде перерисовку вызывать должен...

полный код класса пожалуйста...


Название: Re: Неактивированный QPainter - "QPainter::setPen: Painter not active"
Отправлено: VladGuardian от Ноябрь 04, 2009, 01:41
не понятно, что в самом конце делает update()?! он же вроде перерисовку вызывать должен...
полный код класса пожалуйста...

update() убрал - но дело вовсе не в нем...

-Обновил первый пост-


Название: Re: Неактивированный QPainter - "QPainter::setPen: Painter not active"
Отправлено: pastor от Ноябрь 04, 2009, 01:45
Замени

Код
C++ (Qt)
p.begin(this);

на

Код
C++ (Qt)
p.begin(viewport());


Название: Re: Неактивированный QPainter - "QPainter::setPen: Painter not active"
Отправлено: VladGuardian от Ноябрь 04, 2009, 18:37
Замени p.begin(this); на p.begin(viewport());

Сработало!!! Респект!  :)


Название: Re: Неактивированный QPainter - "QPainter::setPen: Painter not active" (РЕШЕНА)
Отправлено: ruslan89 от Февраль 16, 2010, 20:04
Всем, здаствуйте! Топик новый решил не создавать ибо проблемы таже и решение для вышеуказанного случая не помогло.
что я хотел бы получить? цветовые градиетнты в виде концентиреских окружностей.
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);

        QPainter painter;

        painter.begin(this);

        QPointF         ptCenter(rect().center());
        QRadialGradient gradient(ptCenter, width() / 2, ptCenter);

        gradient.setColorAt(0, Qt::red);
        gradient.setColorAt(0.5, Qt::green);
        gradient.setColorAt(1, Qt::blue);
        painter.setBrush(gradient);
        painter.drawRect(rect());
       
        painter.end();

}

MainWindow::~MainWindow()
{
     delete ui;
}
делаю вид программирования в ct_creator (OpenSUSE).
ошибка таже:
Код:
Starting /mnt/data/programming/Qt/domino/domino...
QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::setBrush: Painter not active
QPainter::drawRects: Painter not active
QPainter::end: Painter not active, aborted

вообще сосздаётся впечатление что я пытаюсь гланды через жёпу автогенам вырезать....нинаю пчиму! пните пожалуйста в нужном направлениии?!
зарание спасибо.


Название: Re: Неактивированный QPainter - "QPainter::setPen: Painter not active" (РЕШЕНА)
Отправлено: sendevent от Февраль 16, 2010, 20:51
вообще сосздаётся впечатление что я пытаюсь гланды через жёпу автогенам вырезать....нинаю пчиму! пните пожалуйста в нужном направлениии?!
зарание спасибо.
бдыщь:
void QWidget::paintEvent ( QPaintEvent * event )   [virtual protected] (http://doc.trolltech.com/4.6/qwidget.html#paintEvent)