Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: remiznik от Январь 24, 2009, 21:40



Название: [qt4] QPainter рисование на виджите ?
Отправлено: 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();
}

не работает ! в чом проблема ?


Название: Re: [qt4] QPainter рисование на виджите ?
Отправлено: lit-uriy от Январь 24, 2009, 21:51
2 remiznik, рисовать надо в событии paintEvent (http://doc.crossplatform.ru/qt/4.4.3/qpainter.html#details)


Название: Re: [qt4] QPainter рисование на виджите ?
Отправлено: Dendy от Январь 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;
}


Название: Re: [qt4] QPainter рисование на виджите ?
Отправлено: remiznik от Январь 24, 2009, 22:19
я что то не понял ! а как мне вызвать это при клике по кнопке ?

код запустил ... но понимание не пришло будем разбираться )за код спасибо )


Название: Re: [qt4] QPainter рисование на виджите ?
Отправлено: Dendy от Январь 24, 2009, 22:35
Цитировать
а как мне вызвать это при клике по кнопке ?

Код
C++ (Qt)
void Paint::on_pushButton_clicked()
{
 frame->update();
}