当前位置: 代码迷 >> QT开发 >> 刚接触QT,一句
  详细解决方案

刚接触QT,一句

热度:79   发布时间:2016-04-25 03:59:22.0
刚接触QT,弱弱的问一句
#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的事件循环来获得的。
  相关解决方案