关于qt:QML MouseArea onEntered hoverEnabled不起作用

QML MouseArea onEntered hoverEnabled does not work

一个非常简单的场景,实际上是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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的新手,所以我不知道问题可能在哪里。我整日用Google搜索来找到答案,但是一切都使我找到了我已经在使用的" set hoverEnabled:true"解决方案。

我正在使用包含VPlay的Qt 2.4.1的Windows(在此认为VPlay并不重要)


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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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也可以。