Qt项目中"主要.cpp"的角色

The role of the 'main.cpp' in a Qt project

本文关键字:角色 cpp 主要 Qt 项目      更新时间:2023-10-16

在Qt项目中,我们通常会找到一个project.pro文件,main.cpp以及几个头文件,源文件和*.ui文件,其中包含为应用程序/项目注入生命和功能的所有资源。如果除了"按下按钮显示'你好,世界!'"之外,可能会有用于存储数据和配置文件等的目录。

我的问题是(尽管确切的答案取决于具体情况(:

在Qt

项目(Qt小部件应用程序(中,main.cpp的一般角色是什么?


为了明确我的意思:

  1. main.cpp的唯一目的是启动应用程序吗?
  2. 如果没有,main.cpp要执行的典型任务是什么?
  3. 说到配置文件 - 考虑应用程序有一个主窗体,该窗体具有(可能还有由主窗体实例化的其他类/对话框(了解从文件中检索到的一些配置数据。初始化是在main.cpp还是在MainForm中进行。简而言之:">设置东西......">应该放在什么地方(根据当前的问题(?
  4. 无论你想说什么...

(注意:完整的答案应包含@thokra的注释,也就是说main.cpp是一个文件名,程序入口点在具有该名称的文件中的外观只是约定。 但是在Qt程序中,这是一个相当遵守的约定,并且通常C++尝试将程序的入口点放在具有该名称的文件中。

一类是全局钩子和设置的注册。 想想像qInstallMessageHandler或QTextCodec::setCodecForCStrings这样的东西。

初始化您的应用程序想要理所当然的任何非Qt库将是另一个领域。

如果您的程序有一个只创建和销毁一次的主窗口对象,那么将"运行一次"代码放在其构造函数/析构函数中似乎同样合适。 但是问问自己,你的应用程序只允许它有一个主窗口到底是什么。 为什么它不能在同一过程中有两个? 即使这不是当今要求的一部分,它也可以暗示架构边界。

我会从个人经验中提到,如果您尝试创建一个从 QApplication 派生的类,然后将全局运行一次代码放入该派生类的构造函数和析构函数中,这比听起来更棘手(特别是如果您生成线程并在该构造函数中创建小部件(。 因此,我认为在大多数情况下,您不应该从QApplication中获得。 我坚持使用它,因为我正在制作一个应用程序框架......但要避免这种情况,您的运行一次代码将进入主.cpp。

"1.主要.cpp的唯一目的是启动应用程序吗?

根据 c++ [标准定义]1,第一部分说:

3.6 开始和终止 [基本.开始]
3.6.1 主要功能
1 程序应包含一个名为main的全局函数,这是程序的指定启动。它 是实现定义的,是否需要独立环境中的程序来定义主 功能。
[ 注意:在独立环境中,启动和终止是实现定义的;启动 包含具有静态存储持续时间的命名空间范围对象的构造函数的执行; 终止包含对具有静态存储持续时间的对象执行析构函数。—尾注 ]

qt应用程序仍在使用C++,因此任何可执行应用程序都需要满足此约束。所以大概是:是的,main()的唯一目的是启动应用程序。

MainFormmain()并没有很强的相关性,除了您的配置将生成一个实例化和调用它的main()函数。你也可以有Qt项目,这些项目根本没有任何MainForm实例(例如,只是一个命令行应用程序(。