我有一个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。
答案 0 :(得分:0)
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.
- 不要泄漏它,拥有一个全局堆分配对象,并在有人附加到库时创建它,并在attache分离时销毁它。是的,关于线程的观点也是100%正确的,因为附加/分离只是来自调用线程并且你无法阻止它,你很可能想要产生一个新线程,分配{{ 1}},甚至可能在线程本地堆栈中,并在那里调用QApplication
。