我想像Wolfram Mathematica中那样创建一个开始窗口,在该窗口被隐藏后,用户可以创建/打开文件,然后程序使用文件编辑器创建一个新窗口,在关闭编辑器后,该编辑器窗口关闭并再次显示启动窗口。如何在QML中制作一些独立的窗口?
答案 0 :(得分:1)
您可以执行以下操作:
Start.qml
import QtQuick 2.11
import QtQuick.Window 2.11
Window {
visible: true
width: 640
height: 480
title: qsTr("Start Window")
onClosing: {
var component = Qt.createComponent("qrc:/Editor.qml");
component.createObject();
}
}
Editor.qml
import QtQuick 2.11
import QtQuick.Window 2.11
Window {
visible: true
width: 640
height: 480
title: qsTr("Editor")
onClosing: {
var component = Qt.createComponent("qrc:/Start.qml");
component.createObject();
}
}
关闭一个视图将使另一个视图出现。因此,对于用户要完全退出应用程序的情况,您可能应该添加另一个按钮。
如果只希望创建视图一次,则可以忽略close事件并设置可见性。例如,您可以执行以下操作:
Start.qml
import QtQuick 2.11
import QtQuick.Window 2.11
Window {
id: mainStartView
visible: true
width: 640
height: 480
title: qsTr("Start Window")
property var editorView
Component.onCompleted: {
editorView = editorComponent.createObject(mainStartView);
}
onClosing: {
close.accepted = false
editorView.visible = true
mainStartView.visible = false
}
Component {
id: editorComponent
Editor {
visible: false
}
}
}
Editor.qml
import QtQuick 2.11
import QtQuick.Window 2.11
Window {
width: 640
height: 480
title: qsTr("Editor")
onClosing: {
close.accepted = false
mainStartView.visible = true
visible = false
}
}
答案 1 :(得分:1)
由于您希望它们是静态且独立的,因此从C ++创建多个窗口可能是一个主意。
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
engine.load(QUrl(QUrl("./main_0.qml")));
engine.load(QUrl(QUrl("./main_1.qml")));
if (engine.rootObjects().isEmpty()) {
qDebug() << "crap";
}
return app.exec();
}
然后使用任何类型的通用数据模型(例如,上下文属性,单例...)将它们设置为可见。