在Qt的主函数中,QApplication如何了解MainWindow?

3

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

#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可以访问并检查顶层窗口小部件?


可以有一个全局变量,所有组件都注册到它上面。 - Passer By
1
这里有一份详尽的文档 - DeiDei
1个回答

0

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


请在回答中更加具体。我能想到的唯一预处理器是元对象编译器。请注意,MOC仅在头文件上运行,并且仅影响包含Q_OBJECT宏的QObject子类。这使得你回答的前提不正确。. . - Mike
预处理,而不是预处理器。就像“代码生成器”一样,没错,那个MOC,它的作用是让QApplication在此时意识到其他Q对象,然后将它们添加为子对象。 - user8612040
抱歉,我认为你又搞混了,QApplication从不接管任何其他QObject,你能否提供任何文档引用来支持这个说法? - Mike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接