实例程序
#include "QtWidgetsApplication1.h"
#include <QtWidgets/QApplication>
#include <QLabel>
#include <QDialog>
#include <QDebug>
#include <QThread>
#include <windows.h>
#include <TlHelp32.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtWidgetsApplication1 w;
QLabel l(nullptr);
l.setText("hello world");
l.show();
w.show();
QThread q;
qDebug("sdasd");
return a.exec();
}
定位过程
- 在
l.show();
处打上断点进行调试
可以发现这里实际上调用了QWidget的setVisible方法 - setVisible方法会调用到private方法的
show_helper()
- 然后qt会先发送一个同步的qevent消息,然后调用
show_sys()
- 每个QWidget会维护一个QWindow的实际窗口抽象类,这里会调到其
setVisible()
函数中
- 最后调用windows平台的现实类的
show_sys
方法 - over!