❝QSignalSpy可以记录对象的信号发射的次数,参数等信息。 ❞
QSignalSpy可以连接到任何对象的任何信号并记录其发射信息。QSignalSpy本身是一个QVariant列表的列表QList<QList<QVariant> >
。信号的每次发射都将向列表中追加一个项,其中包含信号的参数列表。
QSignalSpy(const QObject *object, PointerToMemberFunction signal)
QSignalSpy(const QObject *object, const char *signal)
inline int count() const
QByteArray QSignalSpy::signal() const
QSignalSpy::at(n)
QVariantList arguments = spy.at(n);
arguments.at(0).type();
arguments.at(1).type();
...
arguments.at(n).type();
bool QSignalSpy::wait(int timeout = 5000)
该类位于testlib
测试模块中,意味着它大多数用于测试场景。比如我们为了验证某个对象的信号触发的次数是否符合预期,就可以使用QSignalSpy的count
来验证是否成立。
#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();
}
打印输出:
name: "clicked(bool)"
type: QVariant::bool
count: 3