当绑定发生变化时,我正在尝试找到一种方法来对 QML 元素进行转换。假设您有一个Text
元素,其text
属性绑定到某物。我想要的是当绑定中的数据发生变化时,元素淡出(仍然显示旧数据),切换并淡入新数据(实际转换发生在元素不可见时。)
我一直在到处寻找一种方法来做到这一点,但我可以弄清楚。我曾尝试在 QML 中使用 Qt Quick 动画,但数据本身会在动画运行之前发生变化,从而使动画变得不必要。我尝试创建一个自定义 QDeclarativeItem 对象,该对象在其中调用动画,QDeclarativeItem::paint()
但我不知道如何让它实际运行。
我应该在这里注意,我知道我的绑定在显示的数据发生变化时工作正常,我只是无法让这些动画在适当的时间运行。
这是我尝试使用 QML 的方法:
Text {
id: focusText
text: somedata
Behavior on text {
SequentialAnimation {
NumberAnimation { target: focusText; property: "opacity"; to: 0; duration: 500 }
NumberAnimation { target: focusText; property: "opacity"; to: 1; duration: 500 }
}
}
}
这是我在实现自定义时尝试的QDeclarativeItem
:
// PAINTER
void AnimatedBinding::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
// Setup the pen
QPen pen(m_color, 2);
painter->setPen(pen);
painter->setOpacity(this->opacity());
// Draw the item
if (m_bindingType == QString("text")) {
QPropertyAnimation animation(this, "opacity");
animation.setDuration(1000);
animation.setStartValue(1);
if (drawn) {
animation.setStartValue(1);
animation.setEndValue(0);
animation.start();
} else drawn = true;
painter->drawText(boundingRect(), m_data.toString());
animation.setEndValue(0);
animation.start();
} else {
qCritical() << "Error unknown binding type!";
return;
}
}
但就像我说的,我在画家内部开始的动画从未真正触发过。
有小费吗?以前有人做过吗?大约一个星期以来,我一直在努力解决这个问题。