【问题标题】:QML MouseArea onEntered hoverEnabled does not workQML MouseArea onEntered hoverEnabled 不起作用
【发布时间】: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 在这里很重要)

【问题讨论】:

    标签: qt qml


    【解决方案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 目前在其引擎中不支持悬停状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多