piqt_macros namespace
This commit is contained in:
@@ -28,44 +28,44 @@
|
|||||||
/// connect PIP event "event" of object "src" directly to Qt slot "slot" of object "tgt"
|
/// connect PIP event "event" of object "src" directly to Qt slot "slot" of object "tgt"
|
||||||
/// e.g. PIQCONNECT(&pip_obj, someEvent, &qt_obj, someSlot)
|
/// e.g. PIQCONNECT(&pip_obj, someEvent, &qt_obj, someSlot)
|
||||||
#define PIQCONNECT(src, event, tgt, slot) \
|
#define PIQCONNECT(src, event, tgt, slot) \
|
||||||
__piqConnect(src, #event, &(src)->__stat_eh_##event##__, tgt, &decltype(__removePtr__(tgt))::slot);
|
PIQt::piqConnect(src, #event, &(src)->__stat_eh_##event##__, tgt, &decltype(PIQt::removePtr(tgt))::slot);
|
||||||
|
|
||||||
/// connect PIP event "event" of object "src" to Qt slot "slot" of object "tgt" via Qt::QueuedConnection
|
/// connect PIP event "event" of object "src" to Qt slot "slot" of object "tgt" via Qt::QueuedConnection
|
||||||
/// Note! All argument types must be registered in Qt meta-system!
|
/// Note! All argument types must be registered in Qt meta-system!
|
||||||
/// e.g. PIQCONNECT_QUEUED(&pip_obj, someEvent, &qt_obj, someSlot)
|
/// e.g. PIQCONNECT_QUEUED(&pip_obj, someEvent, &qt_obj, someSlot)
|
||||||
#define PIQCONNECT_QUEUED(src, event, tgt, slot) \
|
#define PIQCONNECT_QUEUED(src, event, tgt, slot) \
|
||||||
__piqConnectQ(src, #event, &(src)->__stat_eh_##event##__, tgt, #slot);
|
PIQt::piqConnectQ(src, #event, &(src)->__stat_eh_##event##__, tgt, #slot);
|
||||||
|
|
||||||
|
|
||||||
/// connect Qt signal "sig" of object "src" directly to PIP event handler "handler" of object "tgt"
|
/// connect Qt signal "sig" of object "src" directly to PIP event handler "handler" of object "tgt"
|
||||||
/// e.g. QPICONNECT(&qt_obj, someSignal, &pip_obj, someHandler)
|
/// e.g. QPICONNECT(&qt_obj, someSignal, &pip_obj, someHandler)
|
||||||
/// Returns QMetaObject::Connection
|
/// Returns QMetaObject::Connection
|
||||||
#define QPICONNECT(src, sig, tgt, handler) \
|
#define QPICONNECT(src, sig, tgt, handler) \
|
||||||
__qpiConnect(src, &decltype(__removePtr__(src))::sig, tgt, &(tgt)->__stat_eh_##handler##__);
|
PIQt::qpiConnect(src, &decltype(PIQt::removePtr(src))::sig, tgt, &(tgt)->__stat_eh_##handler##__);
|
||||||
|
|
||||||
|
|
||||||
template<typename T> T __removePtr__(T*) {}
|
namespace PIQt {
|
||||||
template<typename T> QArgument<T> __qargument(const T & v) {return QArgument<T>(QMetaType::typeName(qMetaTypeId<T>()), v);}
|
|
||||||
|
|
||||||
|
template<typename T> T removePtr(T*) {}
|
||||||
|
template<typename T> QArgument<T> qargument(const T & v) {return QArgument<T>(QMetaType::typeName(qMetaTypeId<T>()), v);}
|
||||||
|
|
||||||
template <typename SR, typename O, typename... ARGS>
|
template <typename SR, typename O, typename... ARGS>
|
||||||
void __piqConnect(PIObject * source, const char * event, void(*func)(void*,ARGS...), O * target, SR(O::*slot)(ARGS...)) {
|
void piqConnect(PIObject * source, const char * event, void(*func)(void*,ARGS...), O * target, SR(O::*slot)(ARGS...)) {
|
||||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](ARGS... args){(target->*slot)(args...);}), LOCATION);
|
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](ARGS... args){(target->*slot)(args...);}), LOCATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <typename... ARGS>
|
template <typename... ARGS>
|
||||||
void __piqConnectQ(PIObject * source, const char * event, void(*func)(void*,ARGS...), QObject * target, const char * slot) {
|
void piqConnectQ(PIObject * source, const char * event, void(*func)(void*,ARGS...), QObject * target, const char * slot) {
|
||||||
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](ARGS... args){
|
PIObject::piConnectLS(source, PIStringAscii(event), PIObject::__newFunctor(func, [target,slot](ARGS... args){
|
||||||
QMetaObject::invokeMethod(target, slot, Qt::QueuedConnection, __qargument(args)...);
|
QMetaObject::invokeMethod(target, slot, Qt::QueuedConnection, qargument(args)...);
|
||||||
}), LOCATION);
|
}), LOCATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
template <typename SR, typename O, typename... ARGS>
|
template <typename SR, typename O, typename... ARGS>
|
||||||
QMetaObject::Connection __qpiConnect(O * source, SR(O::*signal)(ARGS...), PIObject * target, void(*handler)(void*,ARGS...)) {
|
QMetaObject::Connection qpiConnect(O * source, SR(O::*signal)(ARGS...), PIObject * target, void(*handler)(void*,ARGS...)) {
|
||||||
return QObject::connect(source, signal, source, [target,handler](ARGS... args){handler(target, args...);});
|
return QObject::connect(source, signal, source, [target,handler](ARGS... args){handler(target, args...);});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#endif // PIQT_MACROS_H
|
#endif // PIQT_MACROS_H
|
||||||
|
|||||||
Reference in New Issue
Block a user