#include <QApplication>
#include <QWidget>
#include <QPainter>
class MyMainWindow:public QWidget
{
public:
MyMainWindow(QWidget *parent = 0);
private:
void paintEvent(QPaintEvent *);
QPainter *paint;
};
void MyMainWindow::paintEvent(QPaintEvent *)
//paintEvent函数由系统自动调用,用不着我们人为的去调用。
{
paint=new QPainter;
paint->begin(this);
paint->setPen(QPen(Qt::blue,4,Qt::DashLine)); //设置画笔形式
paint->setBrush(QBrush(Qt::red,Qt::SolidPattern)); //设置画刷形式
paint->drawRect(20,20,160,160);
paint->end();
}
MyMainWindow::MyMainWindow(QWidget *parent):QWidget(parent)
{
setGeometry(100,100,200,200);
}
int main(int argc,char **argv)
{
QApplication a(argc,argv);
MyMainWindow w;
w.show();
return a.exec();
}
主函数也没有调用paintEvent这个函数,paintEvent只是个成员函数,要想运行,在主函数里面应该调用这个成员函数才能执行啊。为什么没有调用也能执行呢?
------解决方案--------------------
你用这是系统自带的 你本身不用调用 ,窗口显示的时候会自动调用的
------解决方案--------------------
既然来了,就说说我看法吧。
paintEvent(QPaintEvent *)是一个事件函数,不需要你显示调用,在相应事件发生后,qt框架自己会调用它。
下面是QWidget的事件函数中paintEvent部分。
bool QWidget::event(QEvent *event)
{
……
switch (event->type()) {
……
case QEvent::Paint:
// At this point the event has to be delivered, regardless
// whether the widget isVisible() or not because it
// already went through the filters
paintEvent((QPaintEvent*)event);
break;
……
}
}
QEvent::Paint是定义在QEvent里的一个枚举类型Type中一个值。
而底层的事件是通过qt的事件循环来获得的。