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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [qt4] QPainter рисование на виджите ?  (Прочитано 13450 раз)
remiznik
Гость
« : Январь 24, 2009, 21:40 »

есть главная форма . на ней есть виджет QFrame !  хочу чтоб при нажати на форме появился какойто рисунок но как это реализовать чтото не понимаю !
в книге QT4 Шлее написано ! до словно пишу !
Чтобы использовать обьект QPainter, необходимо передать ему адрес обьекта контекста, на котором должно производиться рисование! Этот адрес можно передать как в конструкторе , так и с помошью метода QPainter::begin().

Код:
void Paint::paint()
{
    QPainter paint;
    paint.begin(frame);
    paint.setRenderHint(QPainter::Antialiasing,true);
    paint.drawLine(QPointF(10,10),QPointF(10,90));
    paint.end();
   
}
void Paint::on_pushButton_clicked()
{
    paint();
}

не работает ! в чом проблема ?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Январь 24, 2009, 21:51 »

2 remiznik, рисовать надо в событии paintEvent
Записан

Юра.
Dendy
Гость
« Ответ #2 : Январь 24, 2009, 21:54 »

Грубо говоря, рисовать на окне можно только в событии paintEvent() этого окна. Повторюсь - в событии именно этого окна, а не paintEvent() чего-то ещё. Если не хотите наследоваться - поставьте перехватчик событий:

Код
C++ (Qt)
Paint::Paint()
{
 ...
 frame->installEventFilter( this );
}
 
bool Paint::eventFilter( QObject * o, QEvent * e )
{
 if ( o == frame && e->type() == QEvent::Paint )
 {
   QPainter p( frame );
   p.setRenderHint(QPainter::Antialiasing,true);
   p.drawLine(QPointF(10,10),QPointF(10,90));
   return true;
 }
 return false;
}
Записан
remiznik
Гость
« Ответ #3 : Январь 24, 2009, 22:19 »

я что то не понял ! а как мне вызвать это при клике по кнопке ?

код запустил ... но понимание не пришло будем разбираться )за код спасибо )
« Последнее редактирование: Январь 24, 2009, 22:27 от remiznik » Записан
Dendy
Гость
« Ответ #4 : Январь 24, 2009, 22:35 »

Цитировать
а как мне вызвать это при клике по кнопке ?

Код
C++ (Qt)
void Paint::on_pushButton_clicked()
{
 frame->update();
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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