2015-09-26 59 views
0

我有一個qt程序。它有一些類,在定義了繼承自QWidget的類的全局變量後,部署失敗。我該怎麼辦? 錯誤如下所示。申請結束退出代碼134

QWidget的:必須構造一個QApplication的一個QWidget
之前 的bash:線1:2230中止DISPLAY = ':0.0'/程序路徑
應用程序完成後,退出代碼134

+1

如果您可以提供您的源代碼,這將是有幫助的。 ;-) – Valinho

回答

1
作爲

它是從錯誤消息看出:

必須之前一個QWidget

構建的QApplication

QWidget繼承的全局是在main函數之前構造的。

擁有這樣的全球化是一個壞主意。

但是,如果你真的想獲得樂趣,你可以嘗試某種單例,或者至少把該靜態變量放入getter函數中,以確保該對象僅在第一次訪問期間被實例化。您還應該確保第一次訪問是在main()中實例化後的QApplication之後。經典的Qt Widget應用程序模板可能如下所示:

MainWindow& getGlobalMainWindow() 
{ 
    static MainWindow w; 
    return w; 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    getGlobalMainWindow().show(); 
    //... 
} 

但是這確實是一個壞主意。在上面的示例中MainWindow(及其子部件)在QApplication後銷燬。如果某些析構函數依賴於QApplication這將是一個問題。

因此,最好的解決方案是避免全局QWidget對象。