【发布时间】: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一起使用)。
标签: qt qml qquickwidget