'main.cpp'在Qt项目中的作用

时间:2014-09-02 19:23:54

标签: c++ qt

在Qt项目中,我们通常会找到一个project.pro文件,main.cpp和几个标题,源文件和*.ui文件,其中包含为应用程序注入生命和功能的所有资源/项目。 如果有更多内容而不是"按下按钮以显示“Hello,world!'" ”,可能存在用于存储数据和配置文件的目录等等。

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

在Qt项目(Qt Widgets应用程序)中main.cpp的一般作用是什么?


明确我的意思:

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

2 个答案:

答案 0 :(得分:6)

(注意:一个完整​​的答案应该包含@ thokra的评论,也就是说main.cpp是一个文件名,并且具有该名称的文件中程序入口点的外观是但是,在Qt程序和C ++中,它通常会很好地遵守惯例,试图将程序的入口点放在具有该名称的文件中。)

一个类别是注册全局挂钩和设置。考虑qInstallMessageHandlerQTextCodec::setCodecForCStrings等内容。

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

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

我从个人经验中提到,如果你尝试创建一个派生自QApplication的类,然后将你的全局运行一次代码放在该派生类的构造函数和析构函数中,那就比它听起来更棘手< em>(特别是如果你在该构造函数中生成线程并生成小部件)。所以我不认为在大多数情况下你应该从QApplication派生出来。我坚持使用它是因为我正在创建一个应用程序 framework ...但是要避免这种情况,并且你的run-once代码会进入main.cpp。

答案 1 :(得分:3)

  

“1。main.cpp是启动应用程序的唯一目的吗?”

[标准定义] 1起,第1部分说:

  

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

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

除了您的配置将生成MainForm函数实例化并调用它之外,

main()main()并不是真正紧密相关。您也可以拥有Qt项目,它们根本没有任何MainForm实例(例如,只是一个命令行应用程序)。