Qt 单个项目中的多个窗口

Qt 单个项目中的多个窗口,qt,qml,qwidget,qtquick2,qquickview,Qt,Qml,Qwidget,Qtquick2,Qquickview,我的项目需要在一个屏幕上显示两个QML窗口(一个发送方,一个接收方)。两个.qml都要求我在其中包含一些Cpp模型,因此,我使用QQmlApplicationEngine注册Cpp模型 我发现使用QWidget::createWindowContainer()可以为单个项目显示多个窗口。这对于第一个QML文件来说非常有效。代码片段如下所示: QQmlApplicationEngine* engine = new QQmlApplicationEngine(Qurl("main.qml")); Q

我的项目需要在一个屏幕上显示两个QML
窗口(一个发送方,一个接收方)。两个
.qml
都要求我在其中包含一些Cpp模型,因此,我使用
QQmlApplicationEngine
注册Cpp模型

我发现使用
QWidget::createWindowContainer()
可以为单个项目显示多个
窗口。这对于第一个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
创建第二个应用程序引擎。我很快意识到,
receive.qml
即使使用
container2->show()
也永远不会打开。现在,它显示的是一个空页面

我的问题是:

  • 我的方法是正确的还是有更好的解决方案
  • 我需要注意什么信号才能抓住窗户关上 事件我似乎无法检测到信号,当其中一个 窗户关上了。因为我想在一个已经关闭的时候关闭这两个 检测到

  • 这可以更容易地完成,例如:

    main.qml

    导入QtQuick 2.3
    导入QtQuick.Window 2.2
    项目{
    窗口{
    对象名称:“wnd1”
    可见:正确
    }
    窗口{
    对象名称:“wnd2”
    可见:正确
    }
    }
    
    <> p>因此,您可以从C++代码访问这些窗口:

    main.cpp

    QQmlApplicationEngine;
    engine.load(QUrl(QStringLiteral(“qrc:/main.qml”));
    QQuickWindow*wnd1=engine.rootObjects()[0]->findChild(“wnd1”);
    若有(wnd1)
    wnd1->setTitle(“服务器”);
    QQuickWindow*wnd2=engine.rootObjects()[0]->findChild(“wnd2”);
    若有(wnd2)
    wnd2->setTitle(“客户”);
    

    要捕获结束事件,您应该使用event

    nice!这个解决方案很有效。似乎我们在任何时候都只能有一台发动机。。至于将第二个窗口切换到第二个屏幕,我从qApplication::desktop获得了可用的度量,并使用wnd2->setX(..)和wnd2->setY(..)设置窗口2的x(),y(),以获得所需的位置。直接通过QQuickWindow设置x,y可以吗?或者我必须使用QObject::setProperty吗?更新:似乎建议使用setProperty来设置X和Y。我将采用这种方法。您可以使用item来调整QMLIt中的大小和位置。QMLIt对我不起作用。我在一个项目中放了一个窗口,但窗口永远不会出现。在Windows中它对我也不起作用。什么也没出现。