Qt项目中"主要.cpp"的角色
The role of the 'main.cpp' in a Qt project
在Qt项目中,我们通常会找到一个project.pro
文件,main.cpp
以及几个头文件,源文件和*.ui
文件,其中包含为应用程序/项目注入生命和功能的所有资源。如果除了"按下按钮显示'你好,世界!'"之外,可能会有用于存储数据和配置文件等的目录。
我的问题是(尽管确切的答案取决于具体情况(:
在Qt项目(Qt小部件应用程序(中,main.cpp的一般角色是什么?
为了明确我的意思:
main.cpp
的唯一目的是启动应用程序吗?- 如果没有,
main.cpp
要执行的典型任务是什么? - 说到配置文件 - 考虑应用程序有一个主窗体,该窗体具有(可能还有由主窗体实例化的其他类/对话框(了解从文件中检索到的一些配置数据。初始化是在
main.cpp
还是在MainForm
中进行。简而言之:">设置东西......">应该放在什么地方(根据当前的问题(? - 无论你想说什么...
(注意:完整的答案应包含@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()
的唯一目的是启动应用程序。
MainForm
和main()
并没有很强的相关性,除了您的配置将生成一个实例化和调用它的main()
函数。你也可以有Qt项目,这些项目根本没有任何MainForm
实例(例如,只是一个命令行应用程序(。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- Linux的Cpp上的计时器
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 命名空间中具有.h和.cpp文件的类
- 内置函数可查看CPP中的成员变量
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- Cpp-Tuple使用带有变量的get
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何通过cpp程序运行shell脚本
- 使用2个键的cpp-stl::优先级队列排序不正确
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 如何在cpp文件之间切换窗口?在Qt中
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我需要知道编译器如何在cpp中使用析构函数
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 无法在UE4中包含BP类到CPP类
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- Qt项目中"主要.cpp"的角色