实例程序
#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();
处打上断点进行调试
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/d3ad171a636d3688e7f39bf01cb86839.png)
可以发现这里实际上调用了QWidget的setVisible方法 - setVisible方法会调用到private方法的
show_helper()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6b71e093670e1169375287ebb501864b.png)
- 然后qt会先发送一个同步的qevent消息,然后调用
show_sys()
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e32c5cc7f3ee8d882ad2786c63988f90.png)
- 每个QWidget会维护一个QWindow的实际窗口抽象类,这里会调到其
setVisible()
函数中
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/a8be5e8f27e7af4656624b48ae1222a0.png)
- 最后调用windows平台的现实类的
show_sys
方法 - over!
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e3612da89cd0ca7356f910c13dd22b2b.png)