QML MouseArea onEntered hoverEnabled 不起作用

Posted

技术标签:

【中文标题】QML MouseArea onEntered hoverEnabled 不起作用【英文标题】:QML MouseArea onEntered hoverEnabled does not work 【发布时间】:2014-02-09 03:59:18 【问题描述】:

其实是一个非常简单的场景:

                Text 
                    text: "Hover me!"
                    font.family: "Arial"
                    font.pointSize: 16

                    MouseArea 
                        anchors.fill: parent
                        hoverEnabled: true

                        onEntered: 
                            parent.color = "#ffffff"
                        

                        onExited: 
                            parent.color = "#000000"
                        
                    
                

如您所见,我想要的只是当我将其悬停时文本颜色会发生变化。但是,它仅在我按住鼠标左键时才有效。由于我对 Qt 很陌生,所以我不知道问题可能出在哪里。我整天在谷歌上寻找答案,但一切都让我找到了我已经在使用的“set hoverEnabled: true”解决方案。

我正在使用 Qt 2.4.1 开发 Windows,包括 VPlay(不认为 VPlay 在这里很重要)

【问题讨论】:

【参考方案1】:

从您的 sn-p 来看,您似乎没有为 Text 元素分配大小(显式或通过锚定),因此它的宽度/高度为 (0,0),这意味着它永远不会包含鼠标光标。请注意,在 QtQuick 中,项目的大小不是由它们的内容或它们绘制的位置定义的(一个项目可以在其(位置,大小)矩形之外的任何地方绘制)。没有明确的宽度/高度属性或锚定的项目将具有 (0,0) 的大小,无论它如何显示在屏幕上。

在以下示例中,鼠标区域的大小为 360,360 继承自其父矩形(通过anchors.fill: parent):

import QtQuick 2.0

Rectangle 
    width: 360
    height: 360
    color: "black"

    Text 
        anchors.centerIn: parent
        text: qsTr("Hello World")
        color: mouseArea.containsMouse ? "red" : "white"
    

    MouseArea 
        id: mouseArea
        anchors.fill: parent
        hoverEnabled: true
    

我更喜欢在此处使用带有 containsMouse 的属性绑定的声明性方法,但 onEntered/onExited 也可以。

【讨论】:

我的代码到目前为止还不错,感谢您的回复。问题属于 V-Play,因为 V-Play 目前在其引擎中不支持悬停状态。

以上是关于QML MouseArea onEntered hoverEnabled 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

转载 qml: MouseArea重叠问题;

QML中MouseArea元素的介绍

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