/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying file Copyright.txt or https://cmake.org/licensing for details. */ #pragma once #include #include #include #include class CatchShow : public QObject { Q_OBJECT public: CatchShow(QObject* parent = nullptr); template void setCallback(F&& func); bool eventFilter(QObject* obj, QEvent* event) override; int count() const; private: std::function m_callback; int m_count = 0; }; template void CatchShow::setCallback(F&& func) { this->m_callback = [this, func](QObject* obj) { auto* d = qobject_cast(obj); if (d) { QMetaObject::invokeMethod( obj, [this, func, d]() { ++this->m_count; func(d); }, Qt::QueuedConnection); } }; }