从QStateMachine

时间:2018-07-27 16:34:57

标签: qt

我目前在QT中使用QStateMachine遇到麻烦。基本上我想用它来控制屏幕之间的流动,例如从母版页切换到详细信息页。

我基本上是这样的:

// Overview
QState* overviewState = new QState();
overviewState->assignProperty(ui->stackedWidget, "currentIndex", 0);
stateMachine->addState(overviewState);

// Editor
QState* editorState = new QState();
editorState ->assignProperty(ui->stackedWidget, "currentIndex", 1);
stateMachine->addState(editorState);

// Overview -> Editor
overviewState->addTransition(overview, SIGNAL(onEditor()), editorState);

到目前为止,此功能按预期运行。概述将发出onEditor,并显示编辑器。但是,现在我想从信号中转发一个值。可以使用所选值(表示用户要编辑条目)或不带值(表示用户从空的编辑器开始)来调用编辑器。然后,概述将具有两个信号:onEditoronEditor(long)。编辑器将具有两个插槽:performInitializeperformInitialize(long)

connect(editorState, SIGNAL(entered()), editor, SLOT(performInitialize()));

这就是我被困住的地方。 (如何)可以将信号从onEditor(long)转发到performInitialize(long)QState发出的信号肯定不了解此附加参数。我该怎么解决?

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以将初始化分为设置和执行阶段:

void Editor::performInitialize(long val); // current implementation - keep it

void Editor::setupInitialize(long val);
  m_initVal = val;
}

void Editor::performInitialize() {
  performInitialize(m_initVal);
}

connect(overview, SIGNAL(onEditor(long)), editor, SLOT(setupInitialize(long)));
overviewState->addTransition(overview, SIGNAL(onEditor(long)), editorState);

addTransition建立与信号的内部连接。 Qt保证插槽按连接顺序执行。因此,可以确保状态转换永远不会在setupInitialize调用之前进行。