QML MouseArea onEntered hoverEnabled不起作用

时间:2014-02-09 03:59:19

标签: qt qml

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

                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”解决方案,我已经在使用它了。

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

1 个答案:

答案 0 :(得分:2)

从你的代码片段来看,你看起来并没有为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也可以。