【发布时间】:2021-06-12 10:45:02
【问题描述】:
我有一个自定义 QML 按钮,如下所示。
import QtQuick 2.15
import QtQuick.Controls 2.15
Button{
id: dashId
width: 155
height: 40
implicitWidth: 155
implicitHeight: 40
text: 'hello'
flat: true
property color colorNormal: '#353535'
property color colorHovered: '#04b9b9'
property color colorClicked: '#4d4f50'
background: Rectangle{
id: bgColor
radius: 10
color: internal.hoverColor
}
contentItem: Item {
id: buttonItem
visible: true
Text {
id: buttonText
text: dashId.text
anchors.centerIn: parent
color: 'white'
}
}
QtObject{
id: internal
property var hoverColor: if(dashId.down){
dashId.down ? colorClicked : colorNormal
}else{
dashId.hovered ? colorHovered : colorNormal
}
}
}
当悬停时,它的默认悬停颜色仍位于自定义悬停颜色之上,而不仅仅是自定义颜色。
我在 Windows 10 上使用 Qt6 和 QtQuick 1.14.1。
【问题讨论】:
-
我没有重现该问题,也许您的代码的另一部分正在产生该问题
-
这个奇怪的结构应该做什么,我的意思是
if?它只是打破了我的大脑。你不是说:property var hoverColor: dashId.down ? colorClicked : (dashId.hovered ? colorHovered : colorNormal)。除此之外,一个单独的对象在这里只是多余的。 -
另外,我不建议将
hoverColor设为var。var属性在更新时不会自动通知绑定。由于它存储了一种颜色,因此应该将其声明为一种颜色。 -
你们都尽力回答我的问题。我的格式非常正确。包括上面的评论实现,都没有工作。我的问题是?为什么应用动态悬停颜色后,按钮默认悬停颜色仍然应用在动态颜色之上??
标签: qt qml qt-quick qtquickcontrols2 qt6