在Qt 5.4中,创建新“QtQuick UI文件”时的模板会生成两个文件:MyScreen.qml
和MyScreen.ui.qml
。
MyScreen.ui.qml
文件似乎仅适用于UI,因为Qt Creator建议您只应在设计模式下编辑它。这意味着我应该在那里创建UI对象(标签,按钮等等),并以某种方式在MyScreen.qml
文件中引用它们。原则上这听起来不错,但遗憾的是Qt没有提供如何使用这两个文件的任何示例。
以下是这些文件的内容:
MyScreen.qml
:
import QtQuick 2.4
MyScreen {
}
MyScreen.ui.qml
(我在设计模式中添加了Text标签):
import QtQuick 2.4
Item {
width: 400
height: 400
Text {
id: text1
x: 144
y: 151
width: 103
height: 31
text: qsTr("Text")
font.pixelSize: 12
}
}
我尝试在MyScreen
中实例化StackView
(见下文),但(不出所料)我看不到标签。
main.qml
:
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
Window {
visible: true
StackView {
id: stack
anchors.fill: parent
initialItem: myscreen
}
MyScreen {
id: myscreen
anchors.fill: parent
}
}
QML新手的任何指针?
答案 0 :(得分:4)
在QtCreator中创建QtQuick UI文件时,您应该以不同的方式命名“组件名称”和“组件表单名称”。
MyScreen.qml创建了一个MyScreen
组件,但在实现中:
MyScreen { /* ... */}
MyScreen
以递归方式创建。
在这种情况下,MyScreen.ui.qml在项目中创建一个MyScreen
组件。同时,由QtCreator自动生成的MyScreen.qml中的代码使用MyScreen.ui.qml创建的组件MyScreen
。不幸的是,MyScreen
也是MyScreen.qml的名称,并使其在运行时以递归方式创建。
使用不同的名称可以解决问题。例如,将MyScreen.ui.qml重命名为MyScreenForm.ui.qml。