2013-11-28 29 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()