在Qt main函数中,QApplication是如何获知Mainwindow的?

In Qt main function, how does QApplication learn about Mainwindow?

查看几乎每个 Qt 教程中都可以找到的最简单的 Qt Widget 示例应用程序:

#include "notepad.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Notepad w;
    w.show();

    return a.exec();
}

有一件事让我很困惑。这里有两个主要变量awa.exec() 启动 Qt 的主循环,它假设与主 GUI 组件交互 w。但是,它们都在堆栈上,我没有看到任何代码以某种方式将 w 传递给 a。那么a是如何知道w的存在的呢? w 的构造函数是否初始化了一个静态数据结构,a 可以访问该静态数据结构来检查顶级小部件?

Qt 预处理您的代码并在编译之前构建真正的 c++ 代码,此时 QApplication 将所有 Q 对象包装在 main.cpp 文件中并从中构建其余代码。