• 11144阅读
  • 5回复

【提问】如何在paintEvent函数外画图 [复制链接]

上一主题 下一主题
离线gaoyu
 
只看楼主 正序阅读 楼主  发表于: 2006-03-10
查看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();
}
离线zyq840112

只看该作者 5楼 发表于: 2009-05-11
关注中!
离线myer

只看该作者 4楼 发表于: 2006-03-15
^实际上还是只能显示出paintEvent中所绘制的长方形,而在构造函数中画的还是显示不出来.

当然,重绘的时候是不可能重新调用构造函数的,构造函数画的东西永远也显示不出来。
http://user.qzone.qq.com/56430808
离线yfy002

只看该作者 3楼 发表于: 2006-03-15
将图片画到一个qimage里,在paintEvent事件中画这个image.具体参见QTDIR\examples\widgets\scribble
我渴望平静,风却给了我涟漪
我的blog:
http://sungaoyong.cublog.cn
离线gaoyu
只看该作者 2楼 发表于: 2006-03-11
现在将程序改写如下:

#include <qapplication.h>
#include <qwidget.h>
#include <qpainter.h>
#include <qfont.h>
#include <Qt>
#include <QPushButton>
#include <stdio.h>


class MyMainWindow:public QWidget
{
     
     public:
           MyMainWindow();
     private:
           void paintEvent(QPaintEvent *);
           QPainter *paint;
           QRect   *rect;
           QPainter *paint1;
           QPushButton *okButton;
           QPushButton *noButton;
};

void MyMainWindow::paintEvent(QPaintEvent *)
{
     paint=new QPainter;
     
     QRect rect(20,20,210,160);
     paint->begin(this);
     paint->drawRect(rect);
     paint->end();
}



MyMainWindow::MyMainWindow()
{
     bool on =true;
     setGeometry(100,100,600,500);
     QWidget::setAttribute(Qt::WA_PaintOutsidePaintEvent,on); ///新加BOOL型变量ON

     bool test=QWidget::testAttribute (Qt::WA_PaintOutsidePaintEvent); //测试
     if(test)
           okButton = new QPushButton("OK",this);
     else
           noButton = new QPushButton("No",this);
     
     paint1=new QPainter;
     paint1->begin(this);
     paint1->drawRect(40,40,200,300);
     paint1->end();
}

int main(int argc,char **argv)
{
     QApplication a(argc,argv);
     MyMainWindow w;
     w.show();
     return a.exec();
}

利用QWidget::testAttribute测试出属性已经设置(打印出了OK按钮,如果属性设置不成功的话应该打印出NO按钮),可还是不能显示出两个长方形.

哪个大侠能教教我怎么回事啊,多谢了!
离线gaoyu
只看该作者 1楼 发表于: 2006-03-11
为什么我问的都没有人回答讷,是太简单了还是问的很不得当啊?

自己顶一个!
快速回复
限100 字节
 
上一个 下一个