- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 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/
我在 QGraphicsView 上显示了一张图片,我试图使用状态机让它移动。单击图像后,我希望它向下移动 200 像素,然后再向右移动 200 像素。这是我到目前为止的代码,但问题是图像不是按需要以
我有一个类,包含一个QStateMachine。它还有几个 QState*。 private: QStateMachine m_machine; QState* m_state1 QState* m_
我正在尝试向 qstatemachine 添加一个带有字符串和枚举的属性,但是 machine.property() 的结果是空的。 QStatemachine m_machine; idle->as
以下代码由于内存损坏而导致崩溃。我假设这是因为 delete pTestStateMachine 试图删除未在堆中分配的内存。对吗? 如果是这样,是否意味着 QStateMachine::addSta
我正在尝试向 QStateMachine 添加一个状态,它给出了一个警告 [20.04 13:31:02 W] QStateMachine::addState: state has already b
有一个状态机(称为外部)。这台机器有两个状态——第一个和最后一个。第一个状态是自定义实现的。在第一个状态中创建了另一个状态机(称为内部状态机),在本例中它什么也不做。 具有两个状态的外部状态机:
我是一名优秀的程序员,十分优秀!