前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt信号记录器

Qt信号记录器

作者头像
Qt君
发布2020-05-08 15:55:27
9220
发布2020-05-08 15:55:27
举报
文章被收录于专栏:跟Qt君学编程

❝QSignalSpy可以记录对象的信号发射的次数,参数等信息。 ❞

  QSignalSpy可以连接到任何对象的任何信号并记录其发射信息。QSignalSpy本身是一个QVariant列表的列表QList<QList<QVariant> >。信号的每次发射都将向列表中追加一个项,其中包含信号的参数列表。

常用接口

  1. 将需要记录对象和其信号传入到构造函数中。
代码语言:javascript
复制
QSignalSpy(const QObject *object, PointerToMemberFunction signal)
QSignalSpy(const QObject *object, const char *signal)
  1. 返回信号触发的次数。
代码语言:javascript
复制
inline int count() const
  1. 返回当前记录的信号名字。
代码语言:javascript
复制
QByteArray QSignalSpy::signal() const
  1. 获取第n次触发的信号信息。
代码语言:javascript
复制
QSignalSpy::at(n)
  1. 获取第n次触发的信号参数列表信息。
代码语言:javascript
复制
 QVariantList arguments = spy.at(n);
arguments.at(0).type();
arguments.at(1).type();
...
arguments.at(n).type();
  1. 默认等待5秒超时时间,如果在超时范围内触发信号则返回true,否则返回false。
代码语言:javascript
复制
bool QSignalSpy::wait(int timeout = 5000)

应用场景

  该类位于testlib测试模块中,意味着它大多数用于测试场景。比如我们为了验证某个对象的信号触发的次数是否符合预期,就可以使用QSignalSpy的count来验证是否成立。

小例子

代码语言:javascript
复制
#include <QApplication>
#include <QSignalSpy>
#include <QPushButton>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QPushButton *btn = new QPushButton;
    QSignalSpy spy(btn, &QPushButton::clicked);

    emit btn->click();
    emit btn->click();
    emit btn->click();

    QVariantList arguments = spy.first();
    qDebug() << "name: " << spy.signal();
    qDebug() << "type: " << arguments.at(0).type();
    qDebug() << "count: " << spy.count();

    return a.exec();
}

打印输出:

代码语言:javascript
复制
name:  "clicked(bool)"
type:  QVariant::bool
count:  3
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常用接口
  • 应用场景
  • 小例子
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档