2017-03-06 94 views
1

早上好QAction信號插槽中的隱形UI

我在ubuntu下使用Qdesigner和C++ 17進行非常簡單的編程也非常具體。 我的GUI和我的問題的目標詳細如下。

AIMS:

我需要標記幾個圖像數據集。 輸入的算法給了我三個輸出存儲在四個文件夾,然後我將diplay從輸入數據集側的每個圖像與三個相應的輸出數據的每一個到另一邊,並finaly採取有關結果的質量布爾判定的算法。 因爲我申請幾個數據集我想,當我開始我的項目來選擇每一個輸入和三個輸出文件夾這個算法。

問題:

我做了主窗口中我加載每個圖像,並採取了決定。 我在約束情況下評估它的效果。 我爲了實現開放項目的目標,我做了第二個UI,在那裏我開放了projet使用的外觀。 我在主窗口外的環境中評估第二個UI,它可以很好地工作。 所以我在slot方法中調用這個ui,但是在我調用菜單時並沒有發生任何事情。 多虧了std::cout比如我可以檢查口法,當我點擊菜單或使用快捷鍵但沒有發生被調用。

下面是由QMenu對象稱爲槽方法。

void main_gui::on_New_Project_triggered() 
{ 
    std::cout<<"NEW PROJECT "<<std::endl; 

    new_project3 np(this,this); 
    // new_project3 np(this,this->parent()); 

    np.show(); 
    np.raise(); 
    np.activateWindow(); 

} 

的new_project3類的構造函數的簽名是:

new_project3(main_gui* main_window, QWidget *parent); 

對於第一個參數我與new_project3類共享main_gui例如爲了初始化幾個QStringList沒有副本。

在此先感謝您的幫助。

EDIT

SOLUTION:

從類QWidget繼承的類new_project3。 出於某種原因,我不知道我沒有到達,使從QMainWindows繼承類的內部工作new_project3任何實例。 但是我修改的new_project3繼承,以從類QDialog繼承,然後將下面的代碼工作得很好:

void main_gui::on_New_Project_triggered() 
{ 
    std::cout<<"NEW PROJECT "<<std::endl; 

    new_project3 np(this,this); 

    np.exec(); 

} 

已經解決我的問題。 我想知道什麼是寫在exec()是解決我的問題。 但是,這將是另一個問題。

回答

0

.exec()QDialog的成員,但不是QWidget的成員)執行事件循環並使其成爲模態(同步,阻止程序)。在你原來的代碼中,這個小部件是一個本地對象,只要插槽結束就被銷燬。由於.show()是非阻塞的,該小部件幾乎立即被標記爲顯示並銷燬。

+0

這就是我沒有看到任何東西的原因。 非常感謝您的解釋。 現在看來很清楚,與用戶的任何交互都必須從QDialog繼承。 –