0
点赞
收藏
分享

微信扫一扫

跟踪Qt信号、槽调用

ZSACH 03-20 10:15 阅读 2

跟踪Qt信号、槽调用

信号与槽机制是一种强大且灵活的对象间通信机制。当程序足够复杂时,信号与槽之间的调用关系会变得错综复杂,难以追踪与理解。

跟踪函数定义

// 信号调用开始
void beginCallSignal(QObject *caller, int signal_index, void **argv);
// 信号调用结束
void endCallSignal(QObject *caller, int signal_index);
// 槽调用开始
void beginCallSlot(QObject *caller, int method_index, void **argv);
// 槽调用结束
void endCallSlot(QObject *caller, int method_index);

槽调用函数参数method_index对应的元方法可以简单通过如下方式获取:

const QMetaMethod &metaMethod = caller->metaObject()->method(method_index);

而信号调用函数参数signal_index仅表示此信号在此对象所有信号序列中的位置。获取方法如下:

#include <private/qmetaobject_p.h>

const QMetaMethod &metaMethod = QMetaObjectPrivate::signal(caller->metaObject(), signal_index);

注册跟踪函数

#include <private/qobject_p.h>

QSignalSpyCallbackSet spySet{&beginCallSignal, &beginCallSlot, &endCallSignal, &endCallSlot};
qt_register_signal_spy_callbacks(&spySet);

引用库

CMake

find_package(Qt5 REQUIRED COMPONENTS Core)
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::CorePrivate)

QMake

QT += core-private

注意

无论接收函数是否被声明为槽函数,都无法跟踪基于函数连接方式的接收函数调用。但是信号函数一定可以被跟踪到。

交流

236510798

举报

相关推荐

0 条评论