
QSignalSpy类使得你可以对信号的发射过程进行监视(introspection)。
QSignalSpy 可以连接到任何对象的任何信号,并且记录它的发射情况。 QSignalSpy本身是一个由 QVariant 列表组成的列表 。信号的每次发射 都会向列表中追加一个条目,其中包含咯那个信号的参数。
下面的例子记录一个 QCheckBox 的 clicked() 信号的全部发射情况 :
QCheckBox *box = ...;
QSignalSpy spy(box, SIGNAL(clicked(bool)));
//触发这个信号
box->animateClick();
QCOMPARE(spy.count(), 1); //确保这个信号只发射一次
QList<QVariant> arguments = spy.takeFirst(); //取出第一个信号
QVERIFY(arguments.at(0).toBool() == true); //验证第一个参数
spy.takeFirst()返回第一个发射的信号的参数 ,以一个 QVariant 对象列表的形式返回 。 clicked()信号只有一个 逻辑值参数,它存储在参数列表的第一个条目 中。
下面的例子会捕捉来自一个自定义对象的某个信号:
QSignalSpy spy(myCustomObject, SIGNAL(mySignal(int, QString, double)));
myCustomObject->doSomething(); //触发信号的发射过程
QList<QVariant> arguments = spy.takeFirst();
QVERIFY(arguments.at(0).type() == QVariant::Int);
QVERIFY(arguments.at(1).type() == QVariant::QString);
QVERIFY(arguments.at(2).type() == QVariant::double);
注意 : 在你创建一 个QSignalSpy 之前,需要使用 qRegisterMetaType ()函数来把非标准的数据类型注册一下。比如 :
qRegisterMetaType<QModelIndex>("QModelIndex");
QSignalSpy spy(&model, SIGNAL(whatever(QModelIndex)));
要想取出那个 QModelIndex ,你可以使用qvariant_cast:
//从接收到的第一 个信号取出第一个参数:
QModelIndex result = qvariant_cast<QModelIndex>(spy.at(0).at(0));
HxLauncher: Launch Android applications by voice commands