gpt4 book ai didi

qt - QML:在 RadioButtonStyle 中使用 Canvas

转载 作者:行者123 更新时间:2023-12-04 13:18:33 27 4
gpt4 key购买 nike

RadioButtonStyle 中使用 Canvas 似乎不起作用。考虑这个简单的例子:

// MyRadioButton.qml
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Controls.Styles 1.3

RadioButton {
id: base
implicitHeight: 24

style: RadioButtonStyle {
spacing: 4

indicator: Canvas {
id: circle
anchors {
left: parent.left
verticalCenter: parent.verticalCenter
}

height: 16
width: 16

antialiasing: true
enabled: control.enabled

property bool hovered: control.hovered
property bool checked: control.checked | control.pressed
property color color: update()

onHoveredChanged: update()
onCheckedChanged: update()
onColorChanged: requestPaint()

function update() {
if ( checked ) {
color = "blue";
} else if ( hovered ) {
color = "green";
} else {
color = "red";
}
}

onPaint: {
var ctx = getContext( "2d" );
ctx.save();
ctx.clearRect( 0, 0, width, height );

ctx.fillStyle = color;

print( "color:", color );

ctx.beginPath();
ctx.arc( height / 2, width / 2, 7, 0, 2 * Math.PI );
ctx.fill();

ctx.restore();
}

Behavior on color {
ColorAnimation {
easing.type: Easing.InOutQuad
}
}
}

label: Text {
anchors {
left: parent.left
verticalCenter: parent.verticalCenter
}

text: control.text
color: control.hovered ? "red" : "black"

Behavior on color {
ColorAnimation {
easing.type: Easing.InOutQuad
}
}
}
}
}

// main.qml
import QtQuick 2.4
import QtQuick.Window 2.0

Window {
id: win
width: 150
height: 150

MyRadioButton {
text: qsTr( "A radio button" )
}
}

RadioButton 的行为符合预期,因为调试打印语句报告了正确的颜色 - 只有屏幕上没有任何实际变化。 RadioButton 以正确的视觉状态初始化,但之后不会改变。

如果我将 Canvas 更改为 Rectangle,那么一切都会按预期进行。

谁能看出我哪里出错了?

最佳答案

问题似乎出在您的 update() 函数上;已经exists in QQuickItem .例如,如果您将其重命名为 updateColor(),您的代码将起作用。我不确定为什么会这样,因为无论是否存在名称冲突,您的 update() 函数仍会被调用,所以我希望它能正常工作...

关于qt - QML:在 RadioButtonStyle 中使用 Canvas ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30494213/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com