QGroundControl
Ground Control Station for MAVLink Drones
Loading...
Searching...
No Matches
WaitForSignalState.h
Go to the documentation of this file.
1#pragma once
2
3#include "WaitStateBase.h"
4
5#include <QtCore/QMetaObject>
6
7#include <functional>
8
14{
15 Q_OBJECT
16 Q_DISABLE_COPY(WaitForSignalState)
17
18public:
24 template<typename Func>
25 WaitForSignalState(const QString& stateName, QState* parent,
26 typename QtPrivate::FunctionPointer<Func>::Object* sender,
27 Func signal, int timeoutMsecs = 0)
29 {
30 // Store the connection setup as a lambda to be called on entry
31 // Use a lambda to handle signals with any parameter types
32 _connectFunc = [this, sender, signal]() {
33 _signalConnection = connect(sender, signal, this, [this]() {
34 _onSignalReceived();
35 });
36 };
37 }
38
39protected:
40 void connectWaitSignal() override;
41 void disconnectWaitSignal() override;
42
43private:
44 void _onSignalReceived();
45
46 QMetaObject::Connection _signalConnection;
47 std::function<void()> _connectFunc;
48};
QString stateName() const
Waits for a signal from a QObject before advancing.
void disconnectWaitSignal() override
Subclasses override to tear down their signal connections.
void connectWaitSignal() override
Subclasses override to set up their signal connections.
WaitForSignalState(const QString &stateName, QState *parent, typename QtPrivate::FunctionPointer< Func >::Object *sender, Func signal, int timeoutMsecs=0)
Base class for states that wait for something with optional timeout.
int timeoutMsecs() const