【问题标题】:Qt qml Button hover colorQt qml 按钮悬停颜色
【发布时间】: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 设为varvar 属性在更新时不会自动通知绑定。由于它存储了一种颜色,因此应该将其声明为一种颜色。
  • 你们都尽力回答我的问题。我的格式非常正确。包括上面的评论实现,都没有工作。我的问题是?为什么应用动态悬停颜色后,按钮默认悬停颜色仍然应用在动态颜色之上??

标签: qt qml qt-quick qtquickcontrols2 qt6


【解决方案1】:

我发现了问题。 我必须在按钮内设置highlighted: trueflat: true

【讨论】:

    【解决方案2】:

    我遇到了类似的问题。在 macOS 和 Linux 上,所有按钮都按预期呈现,但在 Windows 上,会过渡到所需的悬停颜色,然后按钮褪色为白色。

    问题已通过以下方式解决:

    平:真

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-18
      • 2016-07-20
      • 1970-01-01
      • 2013-06-26
      • 2017-07-21
      • 1970-01-01
      • 2018-09-28
      • 2019-03-20
      相关资源
      最近更新 更多