crossplatform.ru

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


  Ответ в Рисование в Qt
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Andrewshkovskii Дата 18.12.2009, 17:44
 
Цитата(kwisp @ 18.12.2009, 13:29) *
Цитата(Andrewshkovskii @ 18.12.2009, 11:56) *
А не только при запуске программы. тебе надо определить слот для сигнала своей кнопки, в котором ты будешь рисовать на виджете QPainter'ом...

а примерчик можно?
по-моему не получится
рисовать на виджете можно только в paintEvent(), исключаяя оверпеинтинг.
в слоте реагирующем на нажатия кнопки можно определить к примеру флаги или параметры и вызывать update() или repaint() а в последующем paintEvent() обрабатывать флаги ли параметры.

Ой, чет я ступил, ре-пэйнт виджета всё и сотрет. Извините:/
Litkevich Yuriy Дата 18.12.2009, 17:26
 
Цитата(kwisp @ 18.12.2009, 16:29) *
рисовать на виджете можно только в paintEvent(), исключаяя оверпеинтинг.
именно

ещё, довольно часто стал сталкиваться, используют практику упомянутую в сообщении № 7
kwisp Дата 18.12.2009, 13:29
 
Цитата(Andrewshkovskii @ 18.12.2009, 11:56) *
А не только при запуске программы. тебе надо определить слот для сигнала своей кнопки, в котором ты будешь рисовать на виджете QPainter'ом...

а примерчик можно?
по-моему не получится
рисовать на виджете можно только в paintEvent(), исключаяя оверпеинтинг.
в слоте реагирующем на нажатия кнопки можно определить к примеру флаги или параметры и вызывать update() или repaint() а в последующем paintEvent() обрабатывать флаги ли параметры.
Andrewshkovskii Дата 18.12.2009, 11:56
 
Цитата(mettamo @ 17.12.2009, 19:20) *
Вообщем я пытаюсь рисовать на виджите

void MainWindow::paintEvent(QPaintEvent *)
{
    ev->
    ui->ButtonBuild->isChecked()
     QPainter painter(this);
     painter.setPen(Qt::blue);
     painter.setFont(QFont("Arial", 30));
     painter.drawText(rect(), Qt::AlignCenter, "Qt");
     
   
}


как сделать чтоб он рисовал по нажатию кнопки а не при запуске программы?

Я все же попробую ответить, хотя Юрий будет на меня ругаться:)
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
 
Цитата(mettamo @ 17.12.2009, 23:46) *
как рисовать по нажатию кнопки и при этом не стирать предыдущий рисунок?
например, такой вариант:
рисуешь в слоте-обработчике кнопки на 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
 
Цитата(greh @ 23.11.2009, 20:04) *
как же всётаки работает event
ОСь шлёт событие, у виджета вызывается соответсвующий данному типу события обработчик - функция содержащая в своём имени слово "event". Например, когда ОСь посылает событие "А ну перерисуйся" вызывается метод paintEvent.

Цитата(greh @ 23.11.2009, 20:04) *
Как заставить его рисовать только тогда когдя я нажимаю кнопку(слот 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
 
Цитата(Litkevich Yuriy @ 23.11.2009, 18:50) *
...

Спасибо! Скомпилировалось и нарсовалось. Только вот проблемка осталась... Как заставить его рисовать только тогда когдя я нажимаю кнопку(слот 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
Цитата(greh @ 23.11.2009, 19:42) *
Стянуто это безобразие из примеров, однако даже не компилируется.
Стало быть стянуто плохо, во-первых раскомментируй то, что ты закомментировал. Во-вторых, добавь недостающие inlude
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 4:07