summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp14
-rw-r--r--src/corelib/statemachine/qstatemachine.h1
-rw-r--r--tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp42
3 files changed, 57 insertions, 0 deletions
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index 3ab108a92b..2d6ced3051 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -1918,6 +1918,20 @@ QStateMachine::QStateMachine(QObject *parent)
}
/*!
+ \since 5.0
+
+ Constructs a new state machine with the given \a childMode
+ and \a parent.
+*/
+QStateMachine::QStateMachine(QState::ChildMode childMode, QObject *parent)
+ : QState(*new QStateMachinePrivate, /*parentState=*/0)
+{
+ Q_D(QStateMachine);
+ d->childMode = childMode;
+ setParent(parent); // See comment in constructor above
+}
+
+/*!
\internal
*/
QStateMachine::QStateMachine(QStateMachinePrivate &dd, QObject *parent)
diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h
index bc3f2fa27f..964b89a66e 100644
--- a/src/corelib/statemachine/qstatemachine.h
+++ b/src/corelib/statemachine/qstatemachine.h
@@ -120,6 +120,7 @@ public:
};
explicit QStateMachine(QObject *parent = 0);
+ QStateMachine(QState::ChildMode childMode, QObject *parent = 0);
~QStateMachine();
void addState(QAbstractState *state);
diff --git a/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp b/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp
index 77dc8dd1cc..af10f06718 100644
--- a/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp
+++ b/tests/auto/corelib/statemachine/qstatemachine/tst_qstatemachine.cpp
@@ -210,6 +210,7 @@ private slots:
void createEventTransitionWhenRunning();
void signalTransitionSenderInDifferentThread();
void signalTransitionRegistrationThreadSafety();
+ void childModeConstructor();
};
class TestState : public QState
@@ -4934,5 +4935,46 @@ void tst_QStateMachine::signalTransitionRegistrationThreadSafety()
QTRY_VERIFY(thread.wait());
}
+void tst_QStateMachine::childModeConstructor()
+{
+ {
+ QStateMachine machine(QState::ExclusiveStates);
+ QCOMPARE(machine.childMode(), QState::ExclusiveStates);
+ QVERIFY(machine.parent() == 0);
+ QVERIFY(machine.parentState() == 0);
+ }
+ {
+ QStateMachine machine(QState::ParallelStates);
+ QCOMPARE(machine.childMode(), QState::ParallelStates);
+ QVERIFY(machine.parent() == 0);
+ QVERIFY(machine.parentState() == 0);
+ }
+ {
+ QStateMachine machine(QState::ExclusiveStates, this);
+ QCOMPARE(machine.childMode(), QState::ExclusiveStates);
+ QCOMPARE(machine.parent(), static_cast<QObject *>(this));
+ QVERIFY(machine.parentState() == 0);
+ }
+ {
+ QStateMachine machine(QState::ParallelStates, this);
+ QCOMPARE(machine.childMode(), QState::ParallelStates);
+ QCOMPARE(machine.parent(), static_cast<QObject *>(this));
+ QVERIFY(machine.parentState() == 0);
+ }
+ QState state;
+ {
+ QStateMachine machine(QState::ExclusiveStates, &state);
+ QCOMPARE(machine.childMode(), QState::ExclusiveStates);
+ QCOMPARE(machine.parent(), static_cast<QObject *>(&state));
+ QCOMPARE(machine.parentState(), &state);
+ }
+ {
+ QStateMachine machine(QState::ParallelStates, &state);
+ QCOMPARE(machine.childMode(), QState::ParallelStates);
+ QCOMPARE(machine.parent(), static_cast<QObject *>(&state));
+ QCOMPARE(machine.parentState(), &state);
+ }
+}
+
QTEST_MAIN(tst_QStateMachine)
#include "tst_qstatemachine.moc"