diff options
author | Kyle Edwards <kyle.edwards@kitware.com> | 2020-09-25 18:58:44 (GMT) |
---|---|---|
committer | Kyle Edwards <kyle.edwards@kitware.com> | 2020-09-28 13:46:35 (GMT) |
commit | 7cd95d99965bf59e2ba8e5cb2835fb9d5d1b3abe (patch) | |
tree | 0b357ab71c21fa4bb521c42a2aed2cfb01e5853b /Tests/CMakeGUI/CatchShow.h | |
parent | 1b03ac7da76c05bfa60e5fcf95aa2bfdf64f27cf (diff) | |
download | CMake-7cd95d99965bf59e2ba8e5cb2835fb9d5d1b3abe.zip CMake-7cd95d99965bf59e2ba8e5cb2835fb9d5d1b3abe.tar.gz CMake-7cd95d99965bf59e2ba8e5cb2835fb9d5d1b3abe.tar.bz2 |
Tests: Add CatchShow helper for CMake GUI tests
Diffstat (limited to 'Tests/CMakeGUI/CatchShow.h')
-rw-r--r-- | Tests/CMakeGUI/CatchShow.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/Tests/CMakeGUI/CatchShow.h b/Tests/CMakeGUI/CatchShow.h new file mode 100644 index 0000000..0254c15 --- /dev/null +++ b/Tests/CMakeGUI/CatchShow.h @@ -0,0 +1,41 @@ +/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying + file Copyright.txt or https://cmake.org/licensing for details. */ +#pragma once + +#include <functional> +#include <memory> + +#include <QObject> +#include <QWidget> + +class CatchShow : public QObject +{ + Q_OBJECT +public: + CatchShow(QObject* parent = nullptr); + + template <typename T, typename F> + void setCallback(F&& func); + bool eventFilter(QObject* obj, QEvent* event) override; + int count() const; + +private: + std::function<void(QObject* obj)> m_callback; + int m_count = 0; +}; + +template <typename T, typename F> +void CatchShow::setCallback(F&& func) +{ + this->m_callback = [this, func](QObject* obj) { + auto* d = qobject_cast<T*>(obj); + if (d) { + QMetaObject::invokeMethod(obj, + [this, func, d]() { + ++this->m_count; + func(d); + }, + Qt::QueuedConnection); + } + }; +} |