【问题标题】:Set common property value in QML such as QSS在 QML 中设置公共属性值,例如 QSS
【发布时间】:2013-01-20 23:20:56
【问题描述】:

例如,我有 2 个具有共同属性的不同 QML 元素,例如:

import QtQuick 2.0

Rectangle {
    width: 360
    height: 360

    Text {
        id: t
        color: "red"
        text: qsTr("Hello World")
        anchors.top: parent.top
    }
    TextInput {
        text: qsTr("Hello all!")
        color: "red"
        anchors.top: t.bottom

    }
}

您可以看到,Text 和 TextInput 具有相同的属性,称为“颜色”,具有相同的值。

在 QSS 中我可以使用公共属性值,例如:

QWidget {
   background: "red"
}

以及所有属于 qss 小部件的 QWidgets 也将具有红色背景。

在 QML 中设置公共属性的方法是什么?

【问题讨论】:

    标签: qt qml qt-quick qtquick2


    【解决方案1】:

    不支持在 QML 中使用 QSS 进行自定义。但是您可以使用“样式对象”方法来设置属性并在所有 QML 文件中使用它们。

    在此,您在“Style.qml”文件中定义一个 Style 对象,其中包含定义样式的属性。在根组件中实例化,因此它将在整个应用程序中可用。

    // Style.qml
    QtObject {
        property int textSize: 20
        property color textColor: "green"
    }
    
    // root component
    Rectangle {
        ...
        Style { id: style }
        ...
    }
    
    // in use
    Text {
        font.pixelSize: style.textSize
        color: style.textColor
        text: "Hello World"
    }
    

    您可以找到更多信息here

    【讨论】:

    • 虽然不是很明显,但是 Rectangle 通过继承获得了 QtObject 的属性。
    • @Jay,这里发生的并不是任何 QtObject 继承魔法。 Style 对象可以很容易地成为 Item 或 Rectangle。这样做的原因是 Style 对象被放置在子树可以访问它的根目录中。
    猜你喜欢
    • 1970-01-01
    • 2019-01-17
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多