2013-11-28 67 views
2

我有一个C++库,我打算为它添加一个可选功能(由宏启用)来显示一些额外的调试信息。这个想法是创建并打开一个用Qt制作的窗口来显示一些数据。我的问题是,我没有访问主函数(它是一个库),所以我不能创建Qt需要的对象QApplication。我曾尝试创建全局对象是这样的:在主函数(库)外实例化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

'QApplication :: instance()'可以让你访问在main(如果有的话)中定义的那个作为QCoreApplication –

+0

问题是我不想强制库的用户添加一些东西他们的主要(甚至包括Qt)。 –

+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. - 不要泄漏它,有一个全局的堆分配对象,并创建它时,有人附加到图书馆和摧毁时,公民分离。是的,关于该线程的观点也是100%正确的,因为附加/分离只是从调用线程进来并且你不能阻止它,你很可能想要产生一个新线程,在那里分配QApplication,也许即使在线程本地堆栈中,并在那里调用run()