使用.ui.qml文件

Tim*_*Tim 12 qt qt-creator qml qtquick2 qtquick-designer

在Qt 5.4中,创建新"QtQuick UI文件"时的模板生成两个文件:MyScreen.qmlMyScreen.ui.qml.

MyScreen.ui.qml文件似乎仅适用于UI,因为Qt Creator建议您只应在设计模式下编辑它.这意味着我应该在那里创建UI对象(标签,按钮等),并以某种方式MyScreen.qml在逻辑所在的文件中引用它们.原则上这听起来不错,但遗憾的是Qt没有提供如何使用这两个文件的任何示例.

以下是这些文件的内容:

MyScreen.qml:

import QtQuick 2.4

MyScreen {
}
Run Code Online (Sandbox Code Playgroud)

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
    }
}
Run Code Online (Sandbox Code Playgroud)

我尝试实例化一个MyScreen用于a 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
    }
}
Run Code Online (Sandbox Code Playgroud)

QML新手的任何指针?

mcc*_*chu 4

在 QtCreator 中创建 QtQuick UI 文件时,应以不同的方式命名“组件名称”和“组件表单名称”。

MyScreen.qml 创建一个MyScreen组件,但是在实现中:

MyScreen { /* ... */}
Run Code Online (Sandbox Code Playgroud)

MyScreen递归地创建自身。

MyScreen在本例中,MyScreen.ui.qml在项目中创建一个组件。同时,QtCreator自动生成的MyScreen.qml中的代码使用了MyScreenMyScreen.ui.qml创建的组件。不幸的是,MyScreen它也是 MyScreen.qml 的名称,并使其在运行时递归地创建自身。

使用不同的名称可以解决问题。例如,将 MyScreen.ui.qml 重命名为 MyScreenForm.ui.qml。