我正在用Qt创建我的第一个程序(这是SO成员在前面的问题中建议的)。Qt社区在其文档中鼓励使用QML作为标记语言和JavaScript来处理逻辑。听起来很有希望,但是文档缺乏很好的初学者对这两者如何以及何时与C ++结合的解释。
从Qt 5文档:
尽管可以使用C ++来访问和操作对象树中的QML对象,但建议您不要在应用程序测试和原型设计之外采用这种方法。
假设我们有一个QtQuick2ApplicationViewer
对象作为我们的主视图,该对象是由默认的Qt Creator模板生成的。首先,我想显示一个我创建的欢迎屏幕welcome.qml
。当用户单击按钮时,主程序即运行app.qml
。从我收集到的信息main
来看,我的函数应该如下所示:
QGuiApplication app(argc, argv);
QtQuick2ApplicationViewer view; // Class generated by the default template.
view.setSource(QUrl("welcome.qml")); // Load QML.
view.showExpanded();
return app.exec();
奇迹般有效。根据文档,我现在应该有一个welcome.js
用于处理关闭欢迎屏幕的文件。现在我很困惑,但- JavaScript的是如何将传达回view
那app.qml
是要加载?更重要的是:应该吗?
嗨罗伯特,
如果我是正确的话,您想知道如何从一个屏幕导航到另一个屏幕。示例:从welcome.qml到app.qml。
现在来问您的问题... JavaScript将如何传达回要加载app.qml的视图?更重要的是:应该吗?
从QML方面,您可以与C ++本机方面进行通信,并让' view '加载app.qml。完全有可能。
更重要的是:应该吗?: 没必要。您可以在不交流' view '的情况下加载不同的qml文件,您需要稍微调整一下代码。而不是这样做
view.setSource(QUrl("welcome.qml"));
您必须这样做。
view.setSource(QUrl("main.qml"));
这里的main.qml是一个qml文件,负责加载不同的qml文件。首先,它将加载“ welcome.qml ”。您需要在main.qml中使用QML Loader来加载不同的qml文件。
这个想法是让* welcome.qml *发出一个信号,在接收到哪个main.qml将加载app.qml时说showAppPage()。以下是一个简单的示例,它执行相同的操作。
//Main.qml
import QtQuick 2.1
Item {
width: 360
height: 360
Loader{
id:pageLoader
source: "welcome.qml"
}
Connections{
target: pageLoader.item
onShowAppPage:{
pageLoader.source = "app.qml"
}
}
}
欢迎页面
//welcome.qml
import QtQuick 2.1
Rectangle {
width: 360
height: 360
color:"blue"
signal showAppPage;
MouseArea{
anchors.fill: parent
onClicked: showAppPage()
}
}
应用页面
//app.qml
import QtQuick 2.1
Rectangle {
width: 360
height: 360
color:"red"
}
您也可以从main.qml加载welcome.qml和app.qml,而无需使用Loader和Qt.createComponent方法。但是QML Loader可以满足您的目的。我希望这回答了你的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句