6#include <QtCore/QObject>
7#include <QtCore/QPointer>
21template <
typename SmartSlotT>
22inline auto connectUntil(
auto* sender,
auto signal, QObject* context, SmartSlotT&& smartSlot,
25 auto* cHolder =
new QObject(context);
28 return QObject::connect(
29 sender, signal, cHolder,
30 [sl = std::forward<SmartSlotT>(smartSlot), cHolder]<
typename... Ts>
31 requires std::invocable<SmartSlotT, Ts...>
32 (
const Ts&... args)
mutable {
33 static_assert(std::is_same_v<
decltype(sl(args...)),
bool>);
41
42
43
44
45
46
56 (*
this)->disconnect(subscriber);
A guard pointer that disconnects an interested object upon destruction.
ConnectionsGuard(ConnectionsGuard &&)=default
ConnectionsGuard(T *publisher, QObject *subscriber)
ConnectionsGuard & operator=(ConnectionsGuard &&)=default
auto connectUntil(auto *sender, auto signal, QObject *context, SmartSlotT &&smartSlot, Qt::ConnectionType connType=Qt::AutoConnection)
Create a connection that self-disconnects when its slot returns true.