QML MouseArea - 检查 Qt.NoModifier

Posted

技术标签:

【中文标题】QML MouseArea - 检查 Qt.NoModifier【英文标题】:QML MouseArea - check for Qt.NoModifier 【发布时间】:2018-04-06 12:43:53 【问题描述】:

我有一个鼠标区域,它的行为应该不同,具体取决于是否按下修饰键。当没有按下修饰键时,还应该有一个默认行为。我这样测试:

        MouseArea 
            anchors.fill: parent
            acceptedButtons: Qt.LeftButton
            onPressed: 
                console.log('Entered onPressed: ', mouse.modifiers&Qt.NoModifier)
                if(mouse.modifiers & Qt.NoModifier) 
                    console.log('Entered If: ', mouse.modifiers&Qt.NoModifier)
                
         

当我在MouseArea 中按下鼠标按钮时,我得到以下输出:

    qml: Entered onPressed:  0

但是第二行没有打印出来。问题似乎是 mouse.modifiers&Qt.NoModifier 被评估为零。相比之下,

                if(mouse.modifiers & Qt.ControlModifier) 
                    console.log("Entered Control if: ",mouse.modifiers&Qt.ControlModifier)
                

正在工作并打印qml: Entered Control if: 67108864 mouse.modifiers&Qt.NoModifier 不应该也被评估为非零值吗?

【问题讨论】:

如果你看Qt标志字段是如何实现的,没有标志总是为零,每个标志值占据一个位位置,所以你可以对标志值进行AND和OR。 【参考方案1】:

所以看起来 Qt.NoModifer 为零,因此 mouse.modifiers&Qt.NoModifier 为零。从而检查

 if(!mouse.modifiers)

应该是解决办法

【讨论】:

以上是关于QML MouseArea - 检查 Qt.NoModifier的主要内容,如果未能解决你的问题,请参考以下文章

QML:没有调用 Rectangle 的 MouseArea 上的 onClicked 方法

QML:在 C++ 中获取 MouseArea 的鼠标事件

如何在 MouseArea 拖动上平移 QML 项目

转载 qml: MouseArea重叠问题;

QML中MouseArea元素的介绍

覆盖 QML 行的 MouseArea(或自动调整大小的图像+文本)