我目前在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
,并显示编辑器。但是,现在我想从信号中转发一个值。可以使用所选值(表示用户要编辑条目)或不带值(表示用户从空的编辑器开始)来调用编辑器。然后,概述将具有两个信号:onEditor
和onEditor(long)
。编辑器将具有两个插槽:performInitialize
和performInitialize(long)
。
connect(editorState, SIGNAL(entered()), editor, SLOT(performInitialize()));
这就是我被困住的地方。 (如何)可以将信号从onEditor(long)
转发到performInitialize(long)
? QState
发出的信号肯定不了解此附加参数。我该怎么解决?
非常感谢。
答案 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
调用之前进行。