使用.ui.qml文件

时间:2014-12-13 08:02:43

标签: qt qml qt-creator 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 {
}

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新手的任何指针?

1 个答案:

答案 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。