Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
QT快速C++;具有多个屏幕的应用程序 我是QT Quy和QML的新手,我正在尝试用C++和Qt构建Linux桌面多屏幕应用程序。我已经看过QT提供的示例,但大多数示例都是单屏幕的,没有解释如何拥有多个屏幕,如何维护屏幕堆栈,以及屏幕如何相互通信以及可用的方法 一个多屏幕Qt快速C++应用程序的例子将有帮助。 < p>这里有一个例子:_C++_Qt_Qml_Qt Quick - Fatal编程技术网

QT快速C++;具有多个屏幕的应用程序 我是QT Quy和QML的新手,我正在尝试用C++和Qt构建Linux桌面多屏幕应用程序。我已经看过QT提供的示例,但大多数示例都是单屏幕的,没有解释如何拥有多个屏幕,如何维护屏幕堆栈,以及屏幕如何相互通信以及可用的方法 一个多屏幕Qt快速C++应用程序的例子将有帮助。 < p>这里有一个例子:

QT快速C++;具有多个屏幕的应用程序 我是QT Quy和QML的新手,我正在尝试用C++和Qt构建Linux桌面多屏幕应用程序。我已经看过QT提供的示例,但大多数示例都是单屏幕的,没有解释如何拥有多个屏幕,如何维护屏幕堆栈,以及屏幕如何相互通信以及可用的方法 一个多屏幕Qt快速C++应用程序的例子将有帮助。 < p>这里有一个例子:,c++,qt,qml,qt-quick,C++,Qt,Qml,Qt Quick,main.cpp 主要功能的有趣部分: QObject *QMLmainWindow = engine.rootObjects()[0]; QQuickWindow *QMLsecondWindow = QMLmainWindow->findChild<QQuickWindow*>("secondWindow"); QQmlComponent *qml = new QQmlComponent(&engine, QUrl(QStringLiteral("qrc:/Thi

main.cpp

主要功能的有趣部分:

QObject *QMLmainWindow = engine.rootObjects()[0];
QQuickWindow *QMLsecondWindow = QMLmainWindow->findChild<QQuickWindow*>("secondWindow");

QQmlComponent *qml = new QQmlComponent(&engine, QUrl(QStringLiteral("qrc:/ThirdWindow.qml")));
QQuickWindow *QMLthirdWindow = qobject_cast<QQuickWindow*>(qml->create());

QList<QScreen*> screens = app.screens();

if (screens.count() > 1) {
    QRect secScreenGeometry = screens.at(1)->geometry();
    QMLsecondWindow->setProperty("visible", true);
    QMLsecondWindow->setX(secScreenGeometry.x());
    QMLsecondWindow->setY(secScreenGeometry.y());
    QMLsecondWindow->resize(secScreenGeometry.width(), secScreenGeometry.height());

    QMLthirdWindow->setScreen(screens.at(1));
    QMLthirdWindow->setProperty("visible", true);
}

return app.exec();
SecondWindow.qml

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    SecondWindow {
        id: secondWindow
        objectName: "secondWindow"
    }
}
import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: false
    width: 640
    height: 480
    title: qsTr("Second Window")
}
import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: false
    width: 640
    height: 480
    title: qsTr("Third Window")
}
ThirdWindow.qml

import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: true
    width: 640
    height: 480
    title: qsTr("Hello World")

    SecondWindow {
        id: secondWindow
        objectName: "secondWindow"
    }
}
import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: false
    width: 640
    height: 480
    title: qsTr("Second Window")
}
import QtQuick 2.12
import QtQuick.Window 2.12

Window {
    visible: false
    width: 640
    height: 480
    title: qsTr("Third Window")
}
QQuickWindow具有继承的方法
setScreen
,但此方法仅适用于顶级窗口。如您所见,
qmlhirdwindow
被创建为独立窗口,我们可以使用
setScreen
方法

但是如果我们想移动
QMLsecondWindow
,我们需要“手动”执行此操作。所以我们需要读取适当屏幕的几何图形,并为放置在目标屏幕上的窗口设置X、Y参数。在上述示例的结果中,“主窗口”将以主屏幕(0)为中心显示,“第二个窗口”将以最大尺寸显示在第二个屏幕(1)上,“第三个窗口”将以第二个屏幕(1)为中心显示。

既然我们有,我将使用纯QML,例如:

Item {
    id: root
    visible: true

    Component.onCompleted: {
        for(var i = 0;i < Qt.application.screens.length;i ++)
        {
            wnd.createObject(root, {wndIndex: i});
        }
    }

    Component {
        id: wnd
        Window {
            property int wndIndex: 0
            visible: true
            width: 640
            height: 480
            title: qsTr("Screen " + wndIndex)
            screen: Qt.application.screens[wndIndex]
        }
    }
}

谢谢你的回复和样品。但是我在考虑每个QML屏幕上的C++类,它将拥有QML屏幕的所有控制和通信。将有一些中心位置来维护屏幕堆栈,以暴露API,从而从屏幕堆栈中推送或弹出屏幕。这是如何实现的。是不是代码
QObject*QMLmainWindow=engine.rootObjects()[0];QQuickWindow*QMLsecondWindow=qobject_cast(QMLmainWindow->findChild(“第二窗口”)将进入一个名为ClassSecondWindow的单独类。还有什么是
QList screens=app.screens()
正在做什么?好的,您在问题中没有提到关于屏幕管理器类的这个细节,所以我写了一个基本示例:)现在您可以了解它是如何进行的,这样您就可以将您需要的内容包装到一些核心屏幕管理类中。如果您以某种方式将类指针传递给引擎变量,您可以在任何地方“捕获”这样的qml窗口。QList screens是不使用
app.screens()
的唯一快捷方式-您可以忽略此选项,并在任何需要访问屏幕列表的地方使用
app.screens()
。当然,
app
是QGUI应用程序对象,默认情况下在主函数开头的Qt Quick Application中创建。是的,我正在为多个屏幕/窗口寻找相同的示例。是否可以指向一些示例代码?恐怕我不知道此类示例。就我的目的而言,来自Qt的标准方法(如示例中所示)已经足够了,所以我现在无法提供更多帮助。但我相信你自己也能做到!祝你好运:)