SpinBoxStyle无法访问按钮状态

时间:2014-09-26 13:26:24

标签: qt qml

来自SpinBoxStyle

QtQuick.Controls.Styles允许您更改SpinBox的外观,其中一部分是重新设计上/下箭头按钮的功能。但是,SpinBox和样式都不能查询向上/向下箭头按钮状态,因此您无法检查它是否被按下或悬停。

这似乎太过疏忽了,所以​​我错过了API文档的哪一部分?

我已尝试向控件委托本身添加MouseArea,但有些理由它从未收到任何事件 - 控件仍然有效,但这表明他们首先“窃取”事件。

SpinBox {
    style: SpinBoxStyle {
        incrementControl: Rectangle {
            implicitHeight: 10
            implicitWidth: 10
            color: "blue"

            MouseArea {
                anchors.fill: parent
                hoverEnabled: true

                onEntered: console.log( "Hello" ) // Never printed
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

Apparently你应该使用styleData属性来检测悬停状态和按下状态,但是没有记录。请为此创建一个错误报告。

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2

SpinBox {
    style: SpinBoxStyle {
        incrementControl: Rectangle {
            implicitHeight: 10
            implicitWidth: 10
            color: styleData.upHovered && !styleData.upPressed
                ? Qt.lighter("blue") : (styleData.upPressed ? Qt.darker("blue") : "blue")
        }
    }
}

我不确定为什么样式是以这种方式实现的,但是如果你仔细研究源代码,你会发现上下控件总是有MouseArea个。这让我非常困惑;如果您不应该提供交互式控件,因为总会有MouseArea个阴影,为什么称它为incrementControldecrementControl?像incrementdecrement这样的名称可能就足够了,因为他们几乎无法接收任何互动(至少点击作品,出于某种原因)。如果您觉得这有点令人困惑,您可能还想为API提交单独的错误报告。

git log --follow -p表明这个代码自引入样式以来没有太大变化,所以我说当前的实现(和API)已经过时了,希望将来有机会改进它