查看QT文档,上面写如果要在paintEvent函数外画图必需要设置 Qt::WA_PaintOutsidePaintEvent,原文如下:
Warning: Unless a widget has the Qt::WA_PaintOutsidePaintEvent attribute set. A QPainter can only be used on a widget inside a paintEvent() or a function called by a paintEvent(). On Mac OS X, you can only paint on a widget in a paintEvent() regardless of this attribute's setting.
在assitant上面找到了属性的设置,在程序中加入了QWidget::setAttribute(Qt::WA_PaintOutsidePaintEvent);按照下面的程序,应该可以画出两个长方形,不知道是我没理解好assistant的意思还是其他的什么原因,实际上还是只能显示出paintEvent中所绘制的长方形,而在构造函数中画的还是显示不出来.
请哪位有经验的大哥指点一下!
#include <qapplication.h>
#include <qwidget.h>
#include <qpainter.h>
#include <Qt>
class MyMainWindow:public QWidget
{
public:
MyMainWindow();
private:
void paintEvent(QPaintEvent *);
QPainter *paint;
QRect *rect;
QPainter *paint1;
};
void MyMainWindow::paintEvent(QPaintEvent *)
{
paint=new QPainter;
QRect rect(20,20,210,160);
paint->begin(this);
paint->drawRect(rect);
paint->end();
}
MyMainWindow::MyMainWindow()
{
setGeometry(100,100,600,500);
QWidget::setAttribute(Qt::WA_PaintOutsidePaintEvent); /////////
paint1=new QPainter;
paint1->begin(this);
paint1->drawRect(40,40,160,160);
paint1->end();
}
int main(int argc,char **argv)
{
QApplication a(argc,argv);
MyMainWindow w;
w.show();
return a.exec();
}