QML:鼠标悬停不起作用

Posted

技术标签:

【中文标题】QML:鼠标悬停不起作用【英文标题】:QML : mouse hover not working 【发布时间】:2014-09-27 10:17:57 【问题描述】:

我有这个 QML 代码,它非常简单,但我的问题是 onEntered 和 onExited 根本不起作用。我看不出代码有什么问题,我觉得这是一个 QtQuick 错误!

import QtQuick 2.2

Rectangle 
    width: 480
    height: 320
    Rectangle 
        x: 30; y: 30
        width: 300; height: 240
        color: "lightsteelblue"

        MouseArea 
            anchors.fill: parent

            hoverEnabled: true

            onEntered: 
                console.log('mouse over ya kbeer');
            

            onExited: 
                console.log('mouse out ya kbeer');
            
        
    

我把它作为一个 qml 组件用于其他地方。不确定,但可能是因为我必须将它们嵌入到另一个 Qt Quick 项目中,鼠标事件无法到达该项目,因为它已被父级缓存,我不确定!

非常感谢任何建议和帮助!

【问题讨论】:

如何使用这个矩形 QML 项目?如果您在另一个也启用了悬停的 QML 项目中使用它,那么它首先会吃掉鼠标事件,这就是为什么您看不到任何接收到的事件。 是的,我在另一个项目中使用它,但没有使用鼠标悬停在上面的项目上,它会捕获 onClicked 但不是 onEntered 好吧,由于某些原因,鼠标事件不会传播到您的内部元素。我建议你一一将 MouseArea 放在父元素中,找出最后一个父元素接收到鼠标事件......并思考它为什么不传播它。 我想我找到了问题,如果你能帮助我,请看看我的回答,我将不胜感激 【参考方案1】:

资源内置于您的可执行文件中。如果要更改它们,则需要重新构建 exe。

您可以尝试通过Add new - Qt - QML file 添加新的QML 文件:在此处编写您的代码(使用Qt Quick),但通过view->setSource(QUrl::fromLocalFile("fullpath.qml")); 将其加载到您的QQuickView 完成应用程序后,将此文件写入资源并使用资源路径。

【讨论】:

为什么 QCreator 总是把它们放在资源上?既然我每次都要重建,有没有办法不这样做? @CreativeCoder 您可以只使用 .qml 文件来编写代码和调试它,但在发布时,将此 .qml 文件写入您的 exe 并使用 Qt 资源系统(在这种情况下,没有人不能查看您的源代码,用户无法删除它。 其实是你把qml文件作为资源。您可以将它们用作可执行文件的相关文件。因此,它们不会嵌入到二进制文件中。另外建议先使用qml模拟器开发QML部分。 @CreativeCoder 最好用户可以删除你的 qml 代码,你的程序会崩溃,或者用户会根据需要重写你的 qml 源代码,应用程序会再次崩溃:) @CreativeCoder 您可以尝试通过 Add new - Qt - QML file 添加新的 QML 文件:在此处编写您的代码(使用 Qt Quick),但通过 view->setSource(QUrl::fromLocalFile("fullpath.qml")); 将其加载到您的 QQuickView 完成您的应用程序,将此文件写入资源并使用资源路径。【参考方案2】:

我发现问题不在代码或 qml 上,而是在 QCreator 本身上,当我更新我的 qml 代码时,因为它在资源中,当我单击运行时,它不会进行最新更新。现在在我重建它之后它工作正常。但是有谁知道为什么会这样!

【讨论】:

有时 QtCreator 确实不会将修改后的资源文件嵌入到二进制文件中,这就是为什么我通常在更改 qml 文件时会重新构建。 有没有办法解决这个问题?我不想每次更新 qml 文件时都重建 如果我知道如何避免这种情况,我不会重建 :) 这是一个已知问题。但是你可以避免这种情况。看我的回答@***.com/questions/25944219/…

以上是关于QML:鼠标悬停不起作用的主要内容,如果未能解决你的问题,请参考以下文章

鼠标悬停导航链接不起作用

如何在鼠标悬停 QML 上突出显示图像

jquery animate 在鼠标悬停时不起作用[关闭]

当我有鼠标悬停事件时,Animate()不起作用

鼠标悬停的背景移动的工作 Jsfiddle 示例在实际项目环境(Django)中不起作用?

将鼠标悬停在带有显示的下拉菜单上:表格在 IE 中不起作用