簡體   English   中英

Qt 中多個 windows 的應用

[英]Application with multiple windows in Qt

在 Qt 中創建具有多個 windows 的應用程序的好方法是什么? 像 GIMP 之類的東西。 我已經閱讀了這個答案,這不是我需要的。

我有兩個 windows,一個帶有控件,一個帶有 OpenGL。 現在我有這樣的事情:

int main()
{
    // some code

    MainWindow mw;
    mw.show();

    GLWindow gw;
    gw.show();

    // ...
}

我不喜歡這個有兩個原因。 第一個原因是當我啟動我的應用程序時,帶有 OpenGL 的 window 將位於頂部(因為它是最后一個調用show() )但MainWindow將被埋在所有打開的 Z0F4137ED1502B5045D6083AA258B54C 下的某個地方我需要的是 windows 在所有東西(如 GIMP)的前面,最好關注MainWindow (我想我可以把它們放在前面,所以這是小問題)。 我不喜歡這個的第二個原因是,只有當我關閉 windows 時,我的應用程序才會完全關閉。

所以我想在MainWindow中引用GLWindow ,並MainWindow創建它。

這是用幾個 windows 創建應用程序的好方法嗎?

編輯:GLWindow 繼承自 QOpenGLWindow。

我不確定我是否完全理解這種情況,但通常情況下,您可以制作QMainWindow的“輔助”小部件子對話框 鑒於您的示例代碼類似於...

int main ()
{
    // some code

    MainWindow mw;
    mw.show();

    /*
     * Secondary windows should be created with the QMainWindow mw
     * as their parent.
     */
    GLWindow gw(&mw);

    /*
     * Set the Qt::Dlaog window flag to `encourage' the QMainWindow
     * and its children to behave as a group.
     */
    gw.setWindowFlags(gw.windowFlags() | Qt::Dialog);
    gw.show();

    // ...
}

現在所有小部件都表現為一個組(可能取決於正在使用的 window 管理器),默認情況下,關閉QMainWindow將關閉應用程序。

您做對了,但是通過以下簡單的技巧,您可以解決這兩個導致您不喜歡正確方法的問題:

  1. 要同時激活 windows,只需執行以下操作:
    MainWindow mw;
    mw.show();
    mw.activateWindow();

    GLWindow gw;
    gw.show();
    gw.activateWindow();
  1. 要解決退出問題,您必須覆蓋 windows 中的closeEvent 為此,請將以下代碼添加到 windows 的header文件中:
protected:
    void closeEvent(QCloseEvent *event) override;

而在closeEvent的實現中,只需要寫qApp->quit(); . 這樣,一旦您關閉 window,您的應用程序將完全終止。

主窗口.cpp

void MainWindow::closeEvent(QCloseEvent *event)
{
    qApp->quit();
}

GLWindow.cpp

void GLWindow::closeEvent(QCloseEvent *event)
{
    qApp->quit();
}

暫無
暫無

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

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