在主函数(库)外部实例化QApplication
Instantialize QApplication outside main function (library)
我有一个c++库,我计划为它添加一个可选功能(由宏启用),以显示一些额外的调试信息。这个想法是创建并打开一个用Qt制作的窗口来显示一些数据。我的问题是我无法访问主函数(它是一个库),所以我无法创建Qt所需的QApplication
对象。我尝试过创建这样的全局对象:
static int argc = 1;
static char argv[1][6] = {"myapp"};
static QApplication app(argc, (char**)argv);
它工作,但在出口处崩溃(在~QApplication()
上)。
另一种选择是在堆上分配对象,并使用新的API方法来初始化/完成库。但是我根本不想改变API。
还有一种方法是,当我第一次需要打开一个窗口并将其泄漏时,就在堆上进行分配。但这似乎不是一个好主意。
有什么想法吗?
我使用的是针对Windows和Linux的Qt 5.1和GCC 4.8。
Another option would be allocate the object on heap and have new API methods to initialize/finalize the library. But I don't want to change the API at all.
-不要泄露它,分配一个全局堆对象,当有人连接到库时创建它,当连接分离时销毁它。是的,关于线程的观点也是100%正确的,因为附加/分离只是从调用线程来的,你不能阻止它,你很可能想要生成一个新线程,在那里分配QApplication
,甚至可能在线程本地堆栈中,并在那里调用run()
。
相关文章:
- 从C++实例化QML
- 设计一个只能由特定类实例化的类(如果可能的话,通过make_unique)
- 如何创建一个空的全局类并在启动时实例化它
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- 约束和显式模板实例化
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 对象实例化调用构造函数的次数太多
- 如何使用非默认构造函数实例化模板化类
- 静态数据成员模板专用化的实例化点在哪里
- 错误的cv::face FacemarkLBF实例化
- C++的解析器在可以区分比较和模板实例化之前会做什么?
- 另一个类中嵌套模板的外部实例化
- 使用"外部模板"来防止模板类的隐式实例化
- 仅标头模板(外部模板)的显式实例化声明
- 在主函数(库)外部实例化QApplication
- 删除函数外部的实例化对象
- 在模板实例化上声明外部 C 函数
- 实例化在另一个项目中定义的类时未解析的外部
- c++外部模板实例化和类型定义(gcc)
- 在源文件中显式实例化vs2010中的外部模板类