2014-09-27 165 views
1

我有这样的QML代码和它真的直线前进,但我的问题是onEntered和onExited不会在所有的工作。我没有看到代码有什么问题,我觉得这是一个QtQuick错误!QML:鼠标悬停不工作

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项目中,因为鼠标事件已被父级缓存,所以不能确定该项目是否到达此项目!

任何建议和帮助真的很感激!

+1

你如何使用这个矩形QML项目?如果您在另一个QML项目中使用它,也会启用鼠标悬停功能,那么它会首先吃掉鼠标事件,这就是为什么您看不到任何收到的事件。 – 2014-09-27 10:32:34

+0

是的,我用它的另一个项目里面,但我不使用在上项目鼠标悬停,其抓了onClicked但不onEntered – 2014-09-27 10:33:57

+1

很好,因为某些原因鼠标事件没有得到传播到你的内部元件。我建议你一个接一个地将MouseArea放在父元素中,并找出最后一个父元素接收鼠标事件的原因......并思考它为什么不传播它。 – 2014-09-27 10:38:00

回答

1

资源已内置到您的可执行文件中。如果你想改变它们,你需要重建exe。

您可以尝试通过Add new - Qt - QML file添加新QML文件:这里写你的代码(使用Qt Quick的),但是当你完成你的应用程序通过它加载view->setSource(QUrl::fromLocalFile("fullpath.qml"));QQuickView,将此文件写入资源和使用资源的路径。

+0

为什么QCreator把他们总是在资源?因为我必须每次重建,有没有办法做到这一点? – 2014-09-27 10:47:26

+1

@CreativeCoder你可以使用.qml文件编写代码并对其进行调试,但在发行版中,将这个.qml文件写入你的exe文件并使用Qt资源系统(在这种情况下,没有人不能看到你的源代码,用户可以不要删除它 – Chernobyl 2014-09-27 10:53:26

+1

实际上,它是把qml文件当作资源,你可以将它们作为相关文件使用到你的可执行文件中,所以它们不会被嵌入到二进制文件中,还建议先开发QML部分,使用QML模拟器。 – 2014-09-27 10:53:31

0

我发现的一个问题是没有对代码或QML但对QCreator本身,当我更新我的QML代码,因为它是在资源,当我点击运行它并不需要最新的更新。现在我重建它的工作正常。但有谁知道为什么会发生这种情况!

+1

有时QtCreator真的没有嵌入修改的资源文件转换为二进制,这就是为什么通常改变QML文件时,我不重建。 – 2014-09-27 10:44:05

+0

有没有办法解决这个问题?我不想重建每次我更新qml文件 – 2014-09-27 10:47:54

+0

如果我知道如何避免这种情况,我不会重建:) – 2014-09-27 10:50:53