gpt4 book ai didi

c++ - 单击按钮后如何顺序过渡到不同的 QState

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:32 26 4
gpt4 key购买 nike

我在 QGraphicsView 上显示了一张图片,我试图使用状态机让它移动。单击图像后,我希望它向下移动 200 像素,然后再向右移动 200 像素。这是我到目前为止的代码,但问题是图像不是按需要以 L 形移动,而是对角线移动,即动画不是从状态 1 过渡到状态 2 然后到状态 3,而是从状态 1 过渡到状态3 跳过状态 2.

stateMachine = new QStateMachine(this);

QState *state_01 = new QState(stateMachine);
QState *state_02 = new QState(stateMachine);
QState *state_03 = new QState(stateMachine);

state_01->assignProperty(pixmap, "pos", QPointF(0, 0));
state_02->assignProperty(pixmap, "pos", QPointF(0, 200));
state_03->assignProperty(pixmap, "pos", QPointF(200, 200));

QAbstractTransition *transition_01 = state_01->addTransition(pixmap, SIGNAL(pixmapPressed()), state_02);
QAbstractTransition *transition_02 = state_02->addTransition(state_03);

transition_01->addAnimation(new QPropertyAnimation(pixmap, "pos"));
transition_02->addAnimation(new QPropertyAnimation(pixmap, "pos"));

stateMachine->setInitialState(state_01);
stateMachine->start();

我想我可能误用了状态 2 到状态 3 的转换语句,但我尝试了其他方法但没有成功。我没有尝试过的唯一另一个想法是检查图像是否已到达状态 2 的位置,并以某种方式发出信号以开始下一次到状态 3 的转换,但我觉得也许我所要求的都是使用状态机框架完成。如何在仅单击一次图像以启动整个过程后让图像在 3 种状态之间移动?

最佳答案

要延迟过渡直到其动画完成,您需要等待 QState 的 propertiesAssigned() 信号。

例如:

QAbstractTransition *transition_02 = state_02->addTransition(state_03);

将变成:

QAbstractTransition *transition_02 = state_02->addTransition(state_02, SIGNAL(propertiesAssigned()), state_03);

阅读https://doc.qt.io/qt-5/statemachine-api.html#detecting-that-all-properties-have-been-set-in-a-state获取更多信息。

关于c++ - 单击按钮后如何顺序过渡到不同的 QState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25255251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com