13

在 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(我在设计模式下添加了文本标签):

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
    }
}

我尝试实例化 aMyScreen以在 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
    }
}

QML新手的任何指针?

4

1 回答 1

4

在 QtCreator 中创建 QtQuick UI 文件时,您应该对“组件名称”和“组件表单名称”进行不同的命名。

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

MyScreen { /* ... */}

MyScreen递归地创建自己。

在这种情况下,MyScreen.ui.qmlMyScreen在项目中创建一个组件。同时,QtCreator 自动生成的 MyScreen.qml 中的代码使用了MyScreenMyScreen.ui.qml 创建的组件。不幸的是,MyScreen这也是 MyScreen.qml 的名称,并使其在运行时递归地创建自己。

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

于 2014-12-14T02:59:53.517 回答