バインディングが変更されたときに、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;
}
}
しかし、私が言ったように、ペインター内で開始したアニメーションは実際には起動しません。
任意のヒント?これまでにこれをやったことがある人はいますか?私はこれについて約1週間頭を悩ませてきました。