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



我有一个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中我没有得到任何语法错误。。。那么,为什么我的对象在运行时被赋予了错误的类型呢?

您应该使用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中的委托一样。

相关内容

  • 没有找到相关文章

最新更新