在Qt项目中,我们通常会找到一个project.pro
文件,main.cpp
和几个标题,源文件和*.ui
文件,其中包含为应用程序注入生命和功能的所有资源/项目。
如果有更多内容而不是"按下按钮以显示“Hello,world!'" ”,可能存在用于存储数据和配置文件的目录等等。
我的问题是(尽管确切的答案取决于具体情况):
在Qt项目(Qt Widgets应用程序)中main.cpp的一般作用是什么?
明确我的意思:
main.cpp
唯一的目的是启动应用程序吗?main.cpp
main.cpp
还是MainForm
中进行的。简而言之:"设置......" 应该放在哪里(根据当前的问题)?答案 0 :(得分:6)
(注意:一个完整的答案应该包含@ thokra的评论,也就是说main.cpp
是一个文件名,并且具有该名称的文件中程序入口点的外观是但是,在Qt程序和C ++中,它通常会很好地遵守惯例,试图将程序的入口点放在具有该名称的文件中。)
一个类别是注册全局挂钩和设置。考虑qInstallMessageHandler或QTextCodec::setCodecForCStrings等内容。
您的应用想要认为理所当然的任何非Qt 库的初始化将是另一个领域。
如果你的程序有一个主窗口对象只能创建和销毁一次,那么将#34;运行一次"同样适合。代码在其构造函数/析构函数中。但问问自己,你的应用程序究竟是什么,它只有一个主窗口。为什么它不能在同一个过程中拥有两个?即使这不是今天要求的一部分,它也可以暗示建筑边界。
我从个人经验中提到,如果你尝试创建一个派生自QApplication的类,然后将你的全局运行一次代码放在该派生类的构造函数和析构函数中,那就比它听起来更棘手< em>(特别是如果你在该构造函数中生成线程并生成小部件)。所以我不认为在大多数情况下你应该从QApplication派生出来。我坚持使用它是因为我正在创建一个应用程序 framework ...但是要避免这种情况,并且你的run-once代码会进入main.cpp。
答案 1 :(得分:3)
“1。main.cpp是启动应用程序的唯一目的吗?”
3.6开始和终止[basic.start]
3.6.1主要功能[basic.start.main]
1 程序应包含一个名为main的全局函数,它是程序的指定开始。它 是实现定义是否需要独立环境中的程序来定义主体 功能。
[注意:在独立环境中,启动和终止是实现定义的;启动 包含具有静态存储持续时间的命名空间作用域对象的构造函数的执行; 终止包含具有静态存储持续时间的对象的析构函数的执行。 -end note]
qt应用程序仍在使用C ++,因此任何可执行应用程序都需要满足此约束。
所以大概:是的,main()
的唯一目的是启动应用程序。
MainForm
函数实例化并调用它之外, main()
和main()
并不是真正紧密相关。您也可以拥有Qt项目,它们根本没有任何MainForm
实例(例如,只是一个命令行应用程序)。