Russian Qt Forum
Ноябрь 24, 2024, 22:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Неактивированный QPainter - "QPainter::setPen: Painter not active" (РЕШЕНА)  (Прочитано 23735 раз)
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


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

Заранее благодарю за правильный ответ!
« Последнее редактирование: Ноябрь 04, 2009, 20:34 от VladGuardian » Записан
_OLEGator_
Гость
« Ответ #1 : Ноябрь 03, 2009, 22:36 »

не понятно, что в самом конце делает update()?! он же вроде перерисовку вызывать должен...

полный код класса пожалуйста...
Записан
VladGuardian
Гость
« Ответ #2 : Ноябрь 04, 2009, 01:41 »

не понятно, что в самом конце делает update()?! он же вроде перерисовку вызывать должен...
полный код класса пожалуйста...

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

-Обновил первый пост-
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Ноябрь 04, 2009, 01:45 »

Замени

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

на

Код
C++ (Qt)
p.begin(viewport());
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
VladGuardian
Гость
« Ответ #4 : Ноябрь 04, 2009, 18:37 »

Замени p.begin(this); на p.begin(viewport());

Сработало!!! Респект!  Улыбающийся
Записан
ruslan89
Гость
« Ответ #5 : Февраль 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

вообще сосздаётся впечатление что я пытаюсь гланды через жёпу автогенам вырезать....нинаю пчиму! пните пожалуйста в нужном направлениии?!
зарание спасибо.
Записан
sendevent
Гость
« Ответ #6 : Февраль 16, 2010, 20:51 »

вообще сосздаётся впечатление что я пытаюсь гланды через жёпу автогенам вырезать....нинаю пчиму! пните пожалуйста в нужном направлениии?!
зарание спасибо.
бдыщь:
void QWidget::paintEvent ( QPaintEvent * event )   [virtual protected]
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.138 секунд. Запросов: 23.