我有一个 C++ 库,我计划向它添加一个可选功能(通过宏启用)以显示一些额外的调试信息。这个想法是创建并打开一个用 Qt 制作的窗口来显示一些数据。我的问题是我无法访问 main 函数(它是一个库),所以我无法创建 Qt 需要的 QApplication
对象。我试过像这样创建全局对象:
static int argc = 1;
static char argv[1][6] = {"myapp"};
static QApplication app(argc, (char**)argv);
它工作但在退出时崩溃(在 ~QApplication()
上)。
另一种选择是在堆上分配对象并使用新的 API 方法来初始化/完成库。但我根本不想更改 API。
还有一个会在我第一次需要打开一个窗口并泄漏它时在堆上分配。但这似乎不是一个好主意。
有什么想法吗?
我正在使用 Qt 5.1 和 GCC 4.8,目标是 Windows 和 Linux。
最佳答案
另一种选择是在堆上分配对象并使用新的 API 方法来初始化/完成库。但我根本不想更改 API。
- 好吧,不要泄露它,拥有一个全局堆分配对象,并在有人附加到库时创建它,并在附件分离时销毁它。是的,关于线程的观点也是 100% 正确的,因为附加/分离只是来自调用线程,你不能阻止它,你很可能想产生一个新线程,分配 QApplication
在那里,甚至可能在线程本地堆栈中,并在那里调用 run()
。
关于c++ - 在主函数(库)之外实例化 QApplication,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20267228/