在主函数(库)外部实例化QApplication

Instantialize QApplication outside main function (library)

本文关键字:外部 实例化 QApplication 函数      更新时间:2023-10-16

我有一个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()