按下鼠标时 QML 图像源不更新
QML Image source is not updated while mouse is pressed
我有 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 一切都按预期工作。
我发现了问题。我在主窗口中使用 QOpenGLWidget
。我在paintGL中调用了update方法。
void Workspace::paintGL() {
QOpenGLWidget::paintGL();
workspaceDrawer.draw();
update();
}
我用计时器替换了更新调用,运行 每 1000 / 60 毫秒。
问题消失了。奇怪的是只有在按下鼠标按钮时它才会被复制,否则一切都会正确更新。
我有 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 一切都按预期工作。
我发现了问题。我在主窗口中使用 QOpenGLWidget
。我在paintGL中调用了update方法。
void Workspace::paintGL() {
QOpenGLWidget::paintGL();
workspaceDrawer.draw();
update();
}
我用计时器替换了更新调用,运行 每 1000 / 60 毫秒。 问题消失了。奇怪的是只有在按下鼠标按钮时它才会被复制,否则一切都会正确更新。