簡體   English   中英

單個項目中的多個窗口

[英]Multiple windows in a single project

我要求我的項目在一個屏幕上顯示兩個QML Window (一個發送者,一個接收者)。 兩個.qml要求我在里面包含一些Cpp模型,因此我使用QQmlApplicationEngine來注冊Cpp模型。

我發現使用QWidget::createWindowContainer()我可以為一個項目顯示多個Window 這適用於第一個QML文件。 代碼片段如下所示:

QQmlApplicationEngine* engine = new QQmlApplicationEngine(Qurl("main.qml"));
QmlContext* context = engine.getContextProperty();

//do some Cpp models registering...

QQuickview *view = new QQuickview(engine,0);
QWidget* container = widget::createWindowContainer(view);  
//I realized I dont need to do container->show(); for the main.qml to appear..

//use desktop widget to move the 2nd container to the 2nd screen...

我決定使用類似的方法為我的receive.qml創建第二個應用程序引擎。 我很快意識到即使使用container2->show()receive.qml也永遠不會打開。 現在,它顯示一個空頁面。

我的問題是:

  1. 我的方法是正確的還是有更好的解決方案?
  2. 我需要注意什么信號來捕捉窗口關閉事件? 當其中一個窗口關閉時,我似乎無法檢測到信號。 因為我想在檢測到兩者時關閉它們。

這可以更容易,例如:

main.qml

import QtQuick 2.3
import QtQuick.Window 2.2

Item {

    Window {
        objectName: "wnd1"
        visible: true
    }

    Window {
        objectName: "wnd2"
        visible: true
    }
}

所以你可以從C ++代碼訪問這些窗口:

main.cpp中

QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    QQuickWindow *wnd1 = engine.rootObjects()[0]->findChild<QQuickWindow *>("wnd1");
    if(wnd1)
        wnd1->setTitle("Server");
    QQuickWindow *wnd2 = engine.rootObjects()[0]->findChild<QQuickWindow *>("wnd2");
    if(wnd2)
        wnd2->setTitle("Client");

要捕獲結束事件,您應該使用QQuickWindow :: closing事件

暫無
暫無

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

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