风格别名

时间:2014-04-30 14:53:20

标签: qt button qml qtquick2 qtquickcontrols

为什么无法为样式定义别名?例如

Button {

    property alias color: theText.color

    style: ButtonStyle {
        label: Text {
            id: theThext  
        }
    }
}

给出

  

qml无效的别名引用无法找到theText

的ID

4 个答案:

答案 0 :(得分:3)

this answer类似,这是因为alias引用的项是动态加载的。像Label这样的样式组件就是:Components。它们是用于创建实际加载Loader的实际样式Item的模板。

答案 1 :(得分:1)

这是我的解决方案(工作示例):

//MyCustomBtn.qml
import QtQuick 2.0
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

Button {
    function setFontColor(fontColor){color_ = fontColor}
    property string color_: "black"

    style: ButtonStyle {
        label: Text {
            color: color_
            text: control.text
        }
    }
}

//MyTest.qml
MyCustomBtn {
    text: qsTr("Hello World")
    anchors.horizontalCenter: parent.horizontalCenter
    anchors.verticalCenter: parent.verticalCenter

    Component.onCompleted: setFontColor("red")
}

答案 2 :(得分:0)

使用默认字体大小

Button {
    property int fontPixelSize: 0
    style: ButtonStyle {
        label: Text {
            font.pixelSize: fontPixelSize ? fontPixelSize : font.pixelSize
            text: control.text
        }
    }

答案 3 :(得分:0)

我的解决方案是像文本一样获取控件的属性。 您甚至可以将此样式保存到单独的样式文件中,并设置控件的labelColor属性。

Button {
    property string labelColor: "yellow"
    text: "hede"
    style: ButtonStyle {
        label: Text {
            color: control.labelColor
            text: control.text
        }
    }
}