无法在单例中创建某些QML类型

时间:2014-04-22 04:33:37

标签: qml qt5

我有一个用于样式的QML单例,定义如下:

pragma Singleton
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Controls.Styles 1.1

QtObject {
    property ProgressBarStyle progressBarErrorStyle: ProgressBarStyle {
        background: Rectangle {
            radius: 2
            color: "lightgray"
            border.color: "gray"
            border.width: 1
            implicitWidth: 200
            implicitHeight: 20
        }
        progress: Rectangle {
            color: "orangered"
            border.color: "red"
        }
    }
}

我可以导入对象并使用它,但progressBarErrorStyle始终为ProgressBarStyle_QMLTYPE_17类型。如果我将其更改为Rectangle,则会将其正确输入为QQuickRectangle

QtQuick.Controls.Styles导入定义ProgressBarStyle,而在QtCreator中我没有收到任何语法错误...为什么我的对象在运行时被赋予了错误的类型?

1 个答案:

答案 0 :(得分:4)

您应该使用Component作为属性类型:

import QtQuick 2.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

Rectangle {
    property Component progressBarErrorStyle: ProgressBarStyle {
        background: Rectangle {
            radius: 2
            color: "lightgray"
            border.color: "gray"
            border.width: 1
            implicitWidth: 200
            implicitHeight: 20
        }
        progress: Rectangle {
            color: "orangered"
            border.color: "red"
        }
    }

    ProgressBar {
        id: progressBar

        NumberAnimation {
            target: progressBar
            property: "value"
            to: 1
            running: true
            duration: 2000
        }

        style: progressBarErrorStyle
    }
}

样式的组件在内部用于Loader项目,在需要时创建组件的实例,就像Qt Quick的ListView中的代表一样。