[qt4.1,win,g++] Using QPainter outside paintEvent()
hi,
how can i draw on a widget outside method paintevent() ?
in the following code the lines are drawn in paintevent(9 but not
in mousemoveevent(). i tried several attributes such as
Qt::WA_PaintOutsidePaintEvent but without success.
void paintEvent(QPaintEvent *e)
{
QLabel::paintEvent(e);
QPainter p(this);
p.setPen(QColor(146, 146, 146));
p.drawRect(0, 0, width() - 5, height() - 5);
}
virtual void mouseMoveEvent ( QMouseEvent * e )
{
QPainter p(this);
QPen pen;
pen.setColor(QColor(200,100,30));
p.setPen( pen );
p.drawLine(QPoint(0,0),e->pos());
p.drawLine(0,0,100,60);
}
any ideas?
jh
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
Is that mouseMoveEvent() method being invoked at all?
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
yes it is. i put some printf's in it to test it (which i just
deleted in the posting)
the method mousemoveevent is called.
in each tutorial and example i found so far the painting is always done
in paintevent. is there anything done by qt internally before paintevent
is called which i have to do before painting (outside paintevent) ?
jh
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
The docs for Qt::WA_PaintOutsidePaintEvent say:
Quote:
Makes it possible to use QPainter to paint on the widget outside paintEvent(). This is not supported on Mac OS X. We recommend that you use this attribute only when porting Qt 3 code to Qt 4.
How did you set this attribute?
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
i set this attribute by calling setAttribute like this:
virtual void mouseMoveEvent ( QMouseEvent * e )
{
setAttribute(Qt::WA_PaintOutsidePaintEvent, true);
QPainter p(this);
QPen pen;
pen.setColor(QColor(200,100,30));
p.setPen( pen );
p.drawLine(QPoint(0,0),e->pos());
p.drawLine(0,0,100,60);
}
regards,
jh
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
Did you try setting it in the constructor?
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
yes. i also tried that.
jh
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
Is this a normal widget or does it use OpenGL?
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
it's a normal widget derived from qlabel:
class PaintTest : public QLabel
{
public:
PaintTest( const QString & text, QWidget * parent = 0, Qt::WFlags f = 0 )
: QLabel(text,parent,f)
{
setAttribute(Qt::WA_PaintOutsidePaintEvent,true);
}
protected:
void ppp()
{
QPainter p(this);
// setAttribute(Qt::WA_PaintOutsidePaintEvent,true);
QPen pen(Qt::DashLine);
pen.setColor(Qt::red);
// p.s0etCompositionMode(QPainter::CompositionMode_Xo r);
p.setPen( pen );
p.drawLine(QPoint(0,0),QPoint(50,70));
p.drawLine(0,0,100,100);
printf("jdhfjkdshfjkhds\n");
fflush(stdout);
}
void paintEvent(QPaintEvent *e)
{
QLabel::paintEvent(e);
QPainter p(this);
p.setPen(QColor(146, 146, 146));
p.drawRect(0, 0, width() - 5, height() - 5);
printf("paintEvent\n");
fflush(stdout);
}
virtual void mouseMoveEvent ( QMouseEvent * e )
{
setAttribute(Qt::WA_PaintOutsidePaintEvent, true);
QPainter p(this);
QPen pen;
pen.setColor(QColor(200,100,30));
p.setPen( pen );
p.drawLine(QPoint(0,0),e->pos());
p.drawLine(0,0,100,60);
// repaint(10,10,50,60);
printf("mouseMoveEvent\n");
fflush(stdout);
}
};
jh
1 Attachment(s)
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
It seems to work on my system (PLD Linux, Qt 4.1.0). See the attached image.
PS. Please, use [ code ] tags to make your code readable.
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
hm ...
linux / win32 - OpSystem problem ?? strange.
if anybody gets this working on win32, let me know!
jh
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
Quote:
Originally Posted by jh
linux / win32 - OpSystem problem ?
Yes, looks like a Qt bug.
http://www.trolltech.com/developer/t...entry&id=83522
Re: [qt4.1,win,g++] Using QPainter outside paintEvent()
ok, so it's not due to my incompetence ;)
i'll wait till 4.1.1
thanx for the hint.
jh