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

标签 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 中我没有收到任何语法错误...那么为什么我的对象给出了错误的类型在运行时?

最佳答案

您应该使用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 中的委托(delegate)一样。 ,例如。

关于qml - 无法在单例中创建某些 QML 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23210427/

相关文章:

c++ - Qt5 延迟加载 opengl32.dll 失败

qt - QML 对象类型不是 QTCreator 中的类型错误

qt - 是否可以在不使用成员函数的情况下实现 Q_PROPERTY READ/WRITE 访问器?

QML矩形不透明度只有颜色

c++ - QEnableSharedFromThis::sharedFromThis() 返回 nullptr

c++ - 如何模拟 QML 组件

qt - 如何正确实现重叠放置目标?

c++ - 无法在基于cmake的qt项目中加载qml文件

c++ - 在 QML 中旋转图像时降低 CPU 使用率

c++ - 在一个 QTableWidget 单元格中显示不同颜色的字符串