StupidBeauty
Read times:1742Posted at:Sat May 14 02:04:03 2011
- no title specified

Qt4.7.0文档翻译:QSignalSpy类参考,QSignalSpy Class Reference

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));

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands