qt - 是否有 Qt/QML 函数来检查形状是否已被单击?
问题描述
我正在尝试在形成六边形的 QML 形状中注册一次点击。我知道有
Shape.FillContains() https://doc.qt.io/qt-5/qml-qtquick-shapes-shape.html#containsMode-prop
我正在尝试使用的属性。但我不知道如何进一步进行,因为我之前刚刚使用过 MouseAreas。
import QtQuick 2.15
import QtQuick.Shapes 1.15
import QtQuick.Extras 1.4
Item
{
id: root
property real srh //ScaleFactor
Shape
{
id: rootShape
width: srh * (6.5 - 0.5)
height: srh * 5.2
anchors.centerIn: parent
containsMode: Shape.FillContains
ShapePath
{
id: myHexagon
strokeWidth: 4
strokeColor: "white"
fillColor: "steelblue"
//Path
startX: 2 * srh;
startY: 0 * srh
PathLine { x: 5 * srh; y: 0 * srh }
PathLine { x: 6.5 * srh; y: 2.6 * srh }
PathLine { x: 5.0 * srh; y: 5.2 * srh }
PathLine { x: 2.0 * srh; y: 5.2 * srh }
PathLine { x: 0.5 * srh; y: 2.6 * srh }
PathLine { x: 2 * srh; y: 0 * srh }
}
}
有谁知道如何使用这个?像 onClicked()-Handler 这样的东西会很好。
谢谢
解决方案
正如有关文档containsMode
所说:
如果您添加Qt 快速输入处理程序并且您只想在鼠标或接触点完全位于形状内时做出反应,这很有用。
TapHandler
您可以使用类似or的输入处理程序HoverHandler
,它们使用其父级的 contains 方法。
Shape {
id: rootShape
width: srh * (6.5 - 0.5)
height: srh * 5.2
anchors.centerIn: parent
containsMode: Shape.FillContains
ShapePath {
id: myHexagon
strokeWidth: 4
strokeColor: "white"
fillColor: hoverHandler.hovered ? "gold" : "steelblue"
//Path
startX: 2 * srh;
startY: 0 * srh
PathLine { x: 5 * srh; y: 0 * srh }
PathLine { x: 6.5 * srh; y: 2.6 * srh }
PathLine { x: 5.0 * srh; y: 5.2 * srh }
PathLine { x: 2.0 * srh; y: 5.2 * srh }
PathLine { x: 0.5 * srh; y: 2.6 * srh }
PathLine { x: 2 * srh; y: 0 * srh }
}
HoverHandler {
id: hoverHandler
}
TapHandler {
onTapped: print("Hexagon clicked")
}
}
推荐阅读
- python - 为什么我的循环在第一次迭代时能正常工作,但在我循环的整个集合上却不能?
- javascript - 如何检测某个用户是否对消息做出反应
- flutter - Flutter/Dart 中列表的访问索引
- c# - 从事务日志中计算机架中的活动盒子
- excel - 选择列中的第一个空单元格并适用于空列
- c - 我正在尝试编写代码以在 C.Tho 中将 int 转换为罗马数字。我的代码完全有效,但输出中打印的额外字符很少
- mysql - 尝试从 Powershell 连接到 MySql 服务器时出现“SSL 连接错误”
- sublimetext - 在 Sublime Text 4 中,有没有办法让拆分视图创建一个新的临时行(而不是临时列)?
- mysql - 在 mysql 5.7.26 中启用二进制日志记录
- python - 如何使用 Huggingface BERT 模型为二元分类器 CNN 提供数据?