QPainter
От: dklaus  
Дата: 06.02.13 19:48
Оценка:
здравствуйте.

начинаю осваивать QPainter. вопрос в следующем.
я перетащил на форму элемент Widget (В Designer'е). далее просто хочу нарисовать линию именно в этом виджете. как указать QPainter'y , что рисовать хочу в нем.

QPainter p(ui->widget);
p.drawLine(..);


-спасибо
Re: QPainter
От: dklaus  
Дата: 06.02.13 19:52
Оценка:
QPainter p(ui->widget); это не помогает.
Re[2]: QPainter
От: Lorenzo_LAMAS  
Дата: 06.02.13 20:02
Оценка:
Здравствуйте, dklaus, Вы писали:

D>QPainter p(ui->widget); это не помогает.


ты в paintEvent рисуешь или как? если нет, то надо, насколько я помню, спец-аттрибут для видгета устанавливать (paint outside of paint event), который еще и работает не везде.
Of course, the code must be complete enough to compile and link.
Re[3]: QPainter
От: dklaus  
Дата: 06.02.13 20:05
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>Здравствуйте, dklaus, Вы писали:


D>>QPainter p(ui->widget); это не помогает.


L_L>ты в paintEvent рисуешь или как? если нет, то надо, насколько я помню, спец-аттрибут для видгета устанавливать (paint outside of paint event), который еще и работает не везде.


#include <QtGui>
#include <QPainter>
#include "form.h"

form::form(QWidget *parent)
{
    ui->setupUi(this);
}

void form::paintEvent(QPaintEvent *event)
{
    QPainter p(ui->widget);
    p.drawLine(10,10,40,40);
}


ничего не рисуется.
Re[4]: QPainter
От: Lorenzo_LAMAS  
Дата: 06.02.13 20:09
Оценка:
а видгет-то сам существует и видим? а какой там цвет у stoke пэинтера по умолчанию?
и, кстати, пэинтЭвент-то формы, а не видгета.
Of course, the code must be complete enough to compile and link.
Re[5]: QPainter
От: dklaus  
Дата: 06.02.13 20:16
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
L_L>и, кстати, пэинтЭвент-то формы, а не видгета.

точно, пропустил этот момент.
а как его прикрутить к виджету?
https://www.dropbox.com/s/6uahddxrk17es2m/qqq.GIF
Re[5]: QPainter
От: Lorenzo_LAMAS  
Дата: 06.02.13 20:23
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>а видгет-то сам существует и видим? а какой там цвет у stoke пэинтера по умолчанию?

L_L>и, кстати, пэинтЭвент-то формы, а не видгета.

http://stackoverflow.com/questions/11140018/qt-paintevent-can-i-paint-on-a-child-widget

вот тут кто-то такое пытается делать и у него есть, кстати, сообщения об ошибках .

и да, похоже, может помочь (но это плохое решение) установка атрибута Qt::WA_PaintOutsidePaintEvent (не знаю, есть ли он в Кут5) на видгете, ну и заодно люди предлагают (вычурные на вид) решения.
Of course, the code must be complete enough to compile and link.
Re[6]: QPainter
От: Lorenzo_LAMAS  
Дата: 06.02.13 20:24
Оценка:
Здравствуйте, dklaus, Вы писали:

D>Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>>и, кстати, пэинтЭвент-то формы, а не видгета.

D>точно, пропустил этот момент.

D>а как его прикрутить к виджету?


а вот люди предлагают эвент фильтры использовать http://stackoverflow.com/questions/11140018/qt-paintevent-can-i-paint-on-a-child-widget
Of course, the code must be complete enough to compile and link.
Re[6]: QPainter
От: DeafCoder  
Дата: 07.02.13 03:46
Оценка:
Здравствуйте, dklaus, Вы писали:

D>Здравствуйте, Lorenzo_LAMAS, Вы писали:

L_L>>и, кстати, пэинтЭвент-то формы, а не видгета.

D>точно, пропустил этот момент.

D>а как его прикрутить к виджету?
D>https://www.dropbox.com/s/6uahddxrk17es2m/qqq.GIF

Создать наследника от виджета и переопределить paintEvent()
Re: QPainter
От: MTD https://github.com/mtrempoltsev
Дата: 07.02.13 07:33
Оценка:
Здравствуйте, dklaus, Вы писали:

D>начинаю осваивать QPainter. вопрос в следующем.

D>я перетащил на форму элемент Widget (В Designer'е). далее просто хочу нарисовать линию именно в этом виджете. как указать QPainter'y , что рисовать хочу в нем.

У виджета есть метод paintEvent, он вызывается когда требуется отрисовка — вот там и рисуй. Пример: http://doc.qt.digia.com/4.7-snapshot/widgets-analogclock-analogclock-cpp.html
Re[7]: QPainter
От: dklaus  
Дата: 07.02.13 14:14
Оценка:
DC>Создать наследника от виджета и переопределить paintEvent()
вопрос конечно глупый, но как это сделать?
Re[8]: QPainter
От: SaZ  
Дата: 07.02.13 14:41
Оценка:
Здравствуйте, dklaus, Вы писали:

DC>>Создать наследника от виджета и переопределить paintEvent()

D>вопрос конечно глупый, но как это сделать?

Уже отвечали: http://www.rsdn.ru/forum/cpp.qt/5059879.1
Автор: MTD
Дата: 07.02.13
Re[9]: QPainter
От: dklaus  
Дата: 07.02.13 15:13
Оценка:
Здравствуйте, SaZ, Вы писали:

SaZ>Здравствуйте, dklaus, Вы писали:


DC>>>Создать наследника от виджета и переопределить paintEvent()

D>>вопрос конечно глупый, но как это сделать?

SaZ>Уже отвечали: http://www.rsdn.ru/forum/cpp.qt/5059879.1
Автор: MTD
Дата: 07.02.13


видел я этот пример. в нем виджет аналогклок написан руками, соответсвенно есть класс виджета и можно переопределить пеинтевент легко. а я хочу понять как это сделать, когда виджет размещен на форме в дизайнере форм.
Re[10]: QPainter
От: Qt-Coder  
Дата: 07.02.13 16:12
Оценка:
Здравствуйте, dklaus, Вы писали:

D>видел я этот пример. в нем виджет аналогклок написан руками, соответсвенно есть класс виджета и можно переопределить пеинтевент легко. а я хочу понять как это сделать, когда виджет размещен на форме в дизайнере форм.


Да наплюйте вы на дизайнер. Руками проще и гибче. Если сильно хочется, то можно создать виджет и добавить его к компонентам дизайнера. Почитайте литературу, где-то мне встречалось это.
Re[10]: QPainter
От: dklaus  
Дата: 07.02.13 19:44
Оценка: +1
Здравствуйте, dklaus, Вы писали:

D>Здравствуйте, SaZ, Вы писали:


SaZ>>Здравствуйте, dklaus, Вы писали:


DC>>>>Создать наследника от виджета и переопределить paintEvent()

D>>>вопрос конечно глупый, но как это сделать?

SaZ>>Уже отвечали: http://www.rsdn.ru/forum/cpp.qt/5059879.1
Автор: MTD
Дата: 07.02.13


D>видел я этот пример. в нем виджет аналогклок написан руками, соответсвенно есть класс виджета и можно переопределить пеинтевент легко. а я хочу понять как это сделать, когда виджет размещен на форме в дизайнере форм.


Решение:
создаем класс виджета. переопределяем там пеинтивент. далее в дизайнере форм, нажимаем правой клавишей мышки на виджет, потом преобразовать в и в поле названия класса — вводим имя нашего созданного руками класса. дальше креатор все сделает сам (ну или руками править файл ui_****.h)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.