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
}
}
}
}
答案 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
个阴影,为什么称它为incrementControl
和decrementControl
?像increment
和decrement
这样的名称可能就足够了,因为他们几乎无法接收任何互动(至少点击作品,出于某种原因)。如果您觉得这有点令人困惑,您可能还想为API提交单独的错误报告。
git log --follow -p
表明这个代码自引入样式以来没有太大变化,所以我说当前的实现(和API)已经过时了,希望将来有机会改进它