簡體   English   中英

QAction信號槽中的不可見UI

[英]Invisible UI in an QAction Signal Slot

早上好

我在ubuntu下使用Qdesigner和C ++ 17編寫一個非常簡單的非常特殊的任務。 我的GUI和我的問題的目標詳述如下。

目的:

我需要標記幾個圖像數據集。 對於輸入,算法給了我三個輸出,存儲在四個文件夾中,然后我將每個圖像從輸入數據集一側顯示到三個相應的輸出數據中的每一個,並最終采取布爾決定關於結果的質量。算法。 因為我在幾個數據集上應用了這個算法,所以當我啟動項目時,我想為每個數據集選擇輸入和三個輸出文件夾。

問題:

我在內部制作主窗口,我加載每個圖像並做出決定。 我在一個約束的情況下評估它運作良好。 為了實現我的開放項目的目標,我制作了第二個UI,其中我使用了開放式項目。 我在主窗口之外的上下文中評估第二個UI,它也可以正常工作。 所以我在插槽方法中調用這個ui,但是當我調用菜單時沒有任何事情發生。 感謝std::cout實例,我可以檢查當我單擊菜單或使用快捷方式時調用插槽方法,但沒有任何反應。

這是QMenu對象調用的slot方法。

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

在此先感謝您的幫助。

編輯

解:

new_project3繼承自類QWidget 出於某種原因,我不知道我沒有到達使得在從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()中寫的是什么來解決我的問題。 但這是另一個問題的意思。

.exec()QDialog成員但不是QWidget成員)執行一個事件循環並使其成為模態(同步,阻塞)。 在您的原始代碼中,小部件是一個本地對象,在插槽結束時被銷毀。 由於.show()是非阻塞的,因此窗口小部件幾乎立即被標記顯示和銷毀。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM