按下鼠标时不会更新 QML 图像源
Posted
技术标签:
【中文标题】按下鼠标时不会更新 QML 图像源【英文标题】:QML Image source is not updated while mouse is pressed 【发布时间】:2018-05-30 15:52:51 【问题描述】:我有 ImageButton.qml,当用户按住按钮时应该会改变图像。
import QtQuick 2.0
Image
id: svg
property string idleImage
property string hoverImage
signal clicked
state: "idle"
source: state === "idle" ? idleImage : hoverImage
onSourceChanged:
console.log("source = " + source)
MouseArea
id: mouseArea
anchors.fill: parent
acceptedButtons: Qt.LeftButton
onPressedChanged:
svg.state = pressed ? "hover" : "idle"
onClicked: svg.clicked()
但图像不会立即更改。只有当我按住按钮几秒钟时它才会改变。当我立即按下并释放鼠标按钮时,我从未看到悬停图像。 onSourceChanged 立即执行并输出到控制台正确的图像源。这个奇怪的错误只有在我使用QQuickWidget
时才会发生。当我不使用小部件时,只有 qml 一切都按预期工作。
【问题讨论】:
您必须定义states
以及state
。拥有state
只是没有意义。顺便说一句,您代码中信号的定义也不正确。
我试图定义状态。它没有帮助。仅当鼠标按钮按下时才会发生,当我释放按钮时图像会更新。
我什至尝试定义一个重复计时器,它可以切换图像。它工作得很好,但是当我将光标移动到该项目并按下鼠标按钮时,计时器停止工作几秒钟。奇怪的原因是我在这个实验中删除了鼠标区域。
我也尝试在状态改变后从cpp桥调用update,也没有帮助。
你能发布你的整个代码吗?有工作和不工作的例子。你的例子对我来说很好。您的信号声明或使用state
没有问题(即使state
确实通常意味着与states
和PropertyChanges
一起使用)。
【参考方案1】:
我发现了问题。我在主窗口中使用QOpenGLWidget
。我在paintGL中调用了update方法。
void Workspace::paintGL()
QOpenGLWidget::paintGL();
workspaceDrawer.draw();
update();
我用计时器替换了更新调用,每 1000 / 60 毫秒运行一次。 问题消失了。奇怪的是它只有在按下鼠标按钮时才会重现,否则一切都会正确更新。
【讨论】:
以上是关于按下鼠标时不会更新 QML 图像源的主要内容,如果未能解决你的问题,请参考以下文章