Здравствуйте, гость ( Вход | Регистрация )
Andrewshkovskii | Дата 18.12.2009, 17:44 |
А не только при запуске программы. тебе надо определить слот для сигнала своей кнопки, в котором ты будешь рисовать на виджете QPainter'ом... а примерчик можно? по-моему не получится рисовать на виджете можно только в paintEvent(), исключаяя оверпеинтинг. в слоте реагирующем на нажатия кнопки можно определить к примеру флаги или параметры и вызывать update() или repaint() а в последующем paintEvent() обрабатывать флаги ли параметры. Ой, чет я ступил, ре-пэйнт виджета всё и сотрет. Извините:/ |
|
Litkevich Yuriy | Дата 18.12.2009, 17:26 |
рисовать на виджете можно только в paintEvent(), исключаяя оверпеинтинг. именноещё, довольно часто стал сталкиваться, используют практику упомянутую в сообщении № 7 |
|
kwisp | Дата 18.12.2009, 13:29 |
А не только при запуске программы. тебе надо определить слот для сигнала своей кнопки, в котором ты будешь рисовать на виджете QPainter'ом... а примерчик можно? по-моему не получится рисовать на виджете можно только в paintEvent(), исключаяя оверпеинтинг. в слоте реагирующем на нажатия кнопки можно определить к примеру флаги или параметры и вызывать update() или repaint() а в последующем paintEvent() обрабатывать флаги ли параметры. |
|
Andrewshkovskii | Дата 18.12.2009, 11:56 |
Вообщем я пытаюсь рисовать на виджите
как сделать чтоб он рисовал по нажатию кнопки а не при запуске программы? Я все же попробую ответить, хотя Юрий будет на меня ругаться:) paintEvent вызывается на виджете каждый раз, когда происходит событие отрисовки. Он вызывается что бы перерисовать весь или часть виджета. Цитата A paint event is a request to repaint all or part of a widget. It can happen for one of the following reasons: repaint() or update() was invoked, the widget was obscured and has now been uncovered, or many other reasons. Проще говоря, когда ты мышкой по своим контролам водишь - он вызывается. когда изменяет размер, положение виджета, когда сворачиваешь и разворачиваешь его.. А не только при запуске программы. тебе надо определить слот для сигнала своей кнопки, в котором ты будешь рисовать на виджете QPainter'ом... |
|
Litkevich Yuriy | Дата 17.12.2009, 22:24 |
как рисовать по нажатию кнопки и при этом не стирать предыдущий рисунок? например, такой вариант:рисуешь в слоте-обработчике кнопки на QImage. А в обработчике события рисования (paintEvent) рисуешь на виджете этот QImage в качестве примера смотри %QTDIR%\examples\widgets\scribble\scribblearea.cpp |
|
mettamo | Дата 17.12.2009, 20:46 |
void MainWindow::paintEvent(QPaintEvent *) { if (!ui->ButtonBuild->isChecked()) { QPainter painter(this); painter.setPen(Qt::blue); painter.setFont(QFont("Arial", 30)); painter.drawText(rect(), Qt::AlignCenter, "Qt"); } } как рисовать по нажатию кнопки и при этом не стирать предыдущий рисунок? |
|
Litkevich Yuriy | Дата 23.11.2009, 18:50 |
как же всётаки работает event ОСь шлёт событие, у виджета вызывается соответсвующий данному типу события обработчик - функция содержащая в своём имени слово "event". Например, когда ОСь посылает событие "А ну перерисуйся" вызывается метод paintEvent.Как заставить его рисовать только тогда когдя я нажимаю кнопку(слот Paint() ) не перерисовывать виджет в обработчике paintEvent, если не была нажата кнопка, например ввести флаг-член_классаВ слоте его выставлять, а в paintEvent'е проверять, после перерисовки сбрасывать |
|
greh | Дата 23.11.2009, 18:39 |
А всё придумал, по умолчанию rect(0,0,0,0) сделать. На самом деле проблема была из за того что написал void PaintEvent(QPaintEvent *); за место paintEvent(QPaintEvent *); спасибо за помощь! |
|
greh | Дата 23.11.2009, 17:04 |
... Спасибо! Скомпилировалось и нарсовалось. Только вот проблемка осталась... Как заставить его рисовать только тогда когдя я нажимаю кнопку(слот Paint() ) и как же всётаки работает event (ну хоть в кратце). |
|
Litkevich Yuriy | Дата 23.11.2009, 16:50 |
по поводу первого parent, смотри "Деревья объектов и владение объектами" (к сожалению ещё не переведено). Ну и описание конструктора класса QWidget: Цитата QWidget::QWidget ( QWidget * parent = 0, Qt::WindowFlags f = 0 ) Constructs a widget which is a child of parent, with widget flags set to f. If parent is 0, the new widget becomes a window. If parent is another widget, this widget becomes a child window inside parent. The new widget is deleted when its parent is deleted. Ну, а по поводу второго, можно посмотреть описание класса QPaintEvent Стянуто это безобразие из примеров, однако даже не компилируется. Стало быть стянуто плохо, во-первых раскомментируй то, что ты закомментировал. Во-вторых, добавь недостающие inlude |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 24.4.2024, 14:30 |