aboutsummaryrefslogtreecommitdiff
path: root/src/qt/callback.h
diff options
context:
space:
mode:
authorRussell Yanofsky <russ@yanofsky.org>2017-03-27 14:34:38 -0400
committerRussell Yanofsky <russ@yanofsky.org>2017-03-27 14:34:38 -0400
commite9a64615c8e18692a775765787f404266767260b (patch)
tree4513ecb574ca9bdb3526cfea8713b068a5035bb5 /src/qt/callback.h
parent919aaf6508557439ab859c25dae86998a9bed12f (diff)
downloadbitcoin-e9a64615c8e18692a775765787f404266767260b.tar.xz
Make qt wallet test compatible with qt4
Unlike Qt5, the Qt4 signals implementation doesn't allow a signal to be directly connected to a c++ lambda expression. Work around this by defining a Callback QObject with a virtual method that can forward calls to a closure. The Qt4 error was reported by Patrick Strateman <patrick.strateman@gmail.com> in https://github.com/bitcoin/bitcoin/pull/10039#issuecomment-289248763
Diffstat (limited to 'src/qt/callback.h')
-rw-r--r--src/qt/callback.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/qt/callback.h b/src/qt/callback.h
new file mode 100644
index 0000000000..a8b593a652
--- /dev/null
+++ b/src/qt/callback.h
@@ -0,0 +1,30 @@
+#ifndef BITCOIN_QT_CALLBACK_H
+#define BITCOIN_QT_CALLBACK_H
+
+#include <QObject>
+
+class Callback : public QObject
+{
+ Q_OBJECT
+public Q_SLOTS:
+ virtual void call() = 0;
+};
+
+template <typename F>
+class FunctionCallback : public Callback
+{
+ F f;
+
+public:
+ FunctionCallback(F f_) : f(std::move(f_)) {}
+ ~FunctionCallback() override {}
+ void call() override { f(this); }
+};
+
+template <typename F>
+FunctionCallback<F>* makeCallback(F f)
+{
+ return new FunctionCallback<F>(std::move(f));
+}
+
+#endif // BITCOIN_QT_CALLBACK_H