如何保持窗口的单个实例?

时间:2018-04-20 18:23:54

标签: qt qml qt5 qtquick2

我有下一个QML:

import Qt.labs.platform 1.0

SystemTrayIcon {
    visible: true
    iconSource: "qrc:/icons/ic_tray.png"
    menu: Menu {
        MenuItem {
            text: qsTr("Settings")
            onTriggered: {
                // Don't create a new object if it exists, just show
                var settings = Qt.createComponent("main.qml")
                var form = settings.createObject(this)
                form.show()
            }
        }
        MenuItem {
            text: qsTr("Quit")
            onTriggered: Qt.quit() // Just hide an existing
        }
    }
}

如何仅在显示/隐藏后一次创建main.qml P.S。我正在学习Qt,仅包括QtQuick 2

2 个答案:

答案 0 :(得分:1)

您可以在onCompleted

中创建该组件
SystemTrayIcon {
    visible: true
    iconSource: "qrc:/icons/ic_tray.png"

    menu: Menu {
        MenuItem {
            text: qsTr("Settings")
            property var form
            onTriggered: {
                form.show()
            }
            Component.onCompleted: {
                // Don't create a new object if it exists, just show
                var settings = Qt.createComponent("Test.qml")
                form = settings.createObject(this)
            }
        }
        MenuItem {
            text: qsTr("Quit")
            onTriggered: Qt.quit() // Just hide an existing
        }
    }
}

答案 1 :(得分:1)

根据您的应用程序的结构,最好的方法是将托盘图标作为属性的窗口传递给您的用户界面结构“进一步”。

首先,展开托盘图标组件并向其添加“窗口”属性:

import QtQuick 2.9
import QtQuick.Window 2.2
import Qt.labs.platform 1.0

SystemTrayIcon {
    id: trayIcon

    // this property holds the window the tray icon controls:
    property Window window

    visible: true

    iconSource: "qrc:/icons/ic_tray.png"
    menu: Menu {
        MenuItem {
            text: qsTr("Settings")
            onTriggered: {
                trayIcon.window.show();
            }
        }
        MenuItem {
            text: qsTr("Quit")
            onTriggered: Qt.quit() // Just hide an existing
        }
    }
}

现在,您可以实例化托盘图标,例如在你的主窗口中像这样:

import QtQuick 2.9
import QtQuick.Window 2.2

Window {
    id: mainWindow

    width: 800
    height: 600

    TrayIcon { window: mainWindow }
}

在这种情况下,托盘图标将控制主窗口本身;但是,您可以在主窗口中轻松创建设置窗口的单个实例,并将其传递到托盘图标。