crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QPainter во вложенном Widget'e
gmurik2
  опции профиля:
сообщение 21.5.2009, 14:42
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 21.5.2009
Пользователь №: 764

Спасибо сказали: 0 раз(а)




Репутация:   0  


Помогите разобраться с QPainter! Начальные условия: есть некая форма, созданная в Designere, в которой есть widget Widget. Теперь я хочу что-нибудь нарисовыть, но безуспешно...

CODE
class reports : public QDialog {
Q_OBJECT
Q_DISABLE_COPY(reports)
public:
explicit reports(QWidget *parent = 0);
virtual ~reports();

protected:
virtual void changeEvent(QEvent *e);
void paintEvent(QPaintEvent *event);


private:
Ui::reports *m_ui;
};


CODE
reports::reports(QWidget *parent) :
QDialog(parent),
m_ui(new Ui::reports)
{
m_ui->setupUi(this);
}

reports::~reports()
{
delete m_ui;
}

void reports::paintEvent(QPaintEvent *event) {
QPainter painter(m_ui->widget);
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setWindow(-50,-50,100,100);
for(int i = 0; i < 12; i++) {
float fAngle = 2 * 3.1415 * i / 12;
int x = cos(fAngle) * 10;
int y = sin(fAngle) * 10;
QColor hourColor(255, 0, 127);
painter.setBrush(hourColor);
painter.drawPoint(x, y);
}
draw(&painter);
}


в чем ошибка?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 21.5.2009, 14:47
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


А в консоль ошибки не сыпятся о том, что рисовать на чужой виджет нельзя?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
gmurik2
  опции профиля:
сообщение 21.5.2009, 19:51
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 23
Регистрация: 21.5.2009
Пользователь №: 764

Спасибо сказали: 0 раз(а)




Репутация:   0  


в консоль выводит это:

QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::setRenderHint: Painter must be active to set rendering hints
QPainter::setWindow: Painter not active
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 21.5.2009, 20:20
Сообщение #4


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


В designer-e нажми по размещенному виджету(QWidget) правой кнопкой мыши. Выбери пункт Promote to.... В promoted class name введи название класса, например, MyWidget.
В проекте создаешь два файла mywidget.h и mywidget.cpp (не забываем добавить их в .pro)

mywidget.h
#include <QtGui/QWidget>
class QPaintEvent;

class MyWidget : public QWidget
{
    Q_OBJECT
public:
    MyWidget(QWidget *parent = 0);
protected:
    void paintEvent(QPaintEvent *event);
};
mywidget.cpp
#include <QtGui/QPaintEvent>
#include "mywidget.h"

MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
}

void MyWidget:: paintEvent(QPaintEvent *event)
{
        QPainter painter(this);
        painter.setPen(Qt::blue);
        painter.setBrush(QBrush(Qt::red));
        painter.draw.....
}


Стратегия думаю понятна. Почитай Бланшет, в инете есть в электронке.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 5.12.2021, 4:37