是否有 Qt/QML 函数来检查形状是否已被单击?
Posted
技术标签:
【中文标题】是否有 Qt/QML 函数来检查形状是否已被单击?【英文标题】:Is there a Qt/QML function to check if a shape has been clicked? 【发布时间】:2020-08-19 12:51:19 【问题描述】:我正在尝试在形成六边形的 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 这样的东西会很好。
谢谢
【问题讨论】:
【参考方案1】:正如关于containsMode
的文档所说:
如果您添加 Qt Quick Input Handlers 并且您只想在鼠标或触摸点完全位于形状内时做出反应,这很有用。
您可以使用TapHandler
或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")
【讨论】:
感谢@GrecKo 我对 containsMode 有点困惑。 你知道如何更改 HoverHandler 以便我可以像 onTapped ... 中的代码执行类似 onHovered: ... 的代码,但我无法在刚刚取消的文档中找到某些内容( ) 和 grabChanged() 这并不是很有帮助。 fillColor: hoverHandler.hovered ? "gold" : "steelblue" 不错,但我需要在悬停时执行更多代码 这有效:HoverHandler id: myHover onHoveredChanged: if(hovered) else 【参考方案2】:您链接到的文档似乎已经指向了答案。您是否尝试过将containsMode
与MouseArea
结合使用?
Shape
id: shape
signal clicked()
containsMode: Shape.FillContains
MouseArea
anchors.fill: parent
onClicked:
if (shape.contains(Qt.point(mouseX, mouseY)))
shape.clicked();
【讨论】:
以上是关于是否有 Qt/QML 函数来检查形状是否已被单击?的主要内容,如果未能解决你的问题,请参考以下文章
是否可以为 android 编译 Qt+QML+OpenCV 应用程序
在QT / QML中是否有IOS的visibleMapRect?
php header setcookie headers_sent函数 函数检查 HTTP 标头是否已被发送以及在哪里被发送