-
UID:7394
-
- 注册时间2006-06-03
- 最后登录2024-05-29
- 在线时间9894小时
-
- 发帖5580
- 搜Ta的帖子
- 精华2
- 金钱56167
- 威望5627
- 贡献值20
- 好评度5629
-
访问TA的空间加好友用道具
|
给你一个完整的测试例子(保存成main.cpp然后编译运行),因为包含3个信号与3个槽在queued与direct两种方式下的所有有效connect方式,所以代码看起来有点多(将近80行)。 如果楼主针对自己的情况去写测试程序,代码量应该可以大大减少。 - #include <QApplication>
- #include <QList>
- #include <QDebug>
- #include <QStandardItem>
- typedef QList<QStandardItem*> ItemsList;
- class TestSignal:public QObject
- {
- Q_OBJECT
- public:
- explicit TestSignal(QObject * parent=0) :QObject(parent)
- {
- m_list.append(new QStandardItem("Item1"));
- }
- ~TestSignal() { delete m_list[0];}
- void emitslots()
- {
- emit sig1(m_list);
- emit sig2(m_list);
- emit sig3(m_list);
- }
- signals:
- void sig1(const ItemsList & l);
- void sig2(ItemsList & l);
- void sig3(ItemsList l);
- private:
- ItemsList m_list;
- };
- class TestSlot:public QObject
- {
- Q_OBJECT
- public:
- explicit TestSlot(const QString & text, QObject * parent=0)
- :QObject(parent), m_text(text)
- {}
- public slots:
- void slt1(const ItemsList & l) { output("const ItemsList &", l);}
- void slt2(ItemsList & l) {output("ItemsList &", l);}
- void slt3(ItemsList l) {output("ItemsList", l);}
- private:
- void output(const QString & text, const ItemsList & l)
- {
- qDebug()<<QString("%1 %2 %3").arg(m_text,10).arg(text,20).arg(l[0]->text());
- }
- QString m_text;
- };
- #include "main.moc"
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- TestSignal sender;
- TestSlot receiver1("direct");
- TestSlot receiver2("queued");
- QObject::connect(&sender, SIGNAL(sig1(ItemsList)), &receiver1, SLOT(slt1(ItemsList)));
- QObject::connect(&sender, SIGNAL(sig1(ItemsList)), &receiver1, SLOT(slt3(ItemsList)));
- QObject::connect(&sender, SIGNAL(sig2(ItemsList&)), &receiver1, SLOT(slt2(ItemsList&)));
- QObject::connect(&sender, SIGNAL(sig3(ItemsList)), &receiver1, SLOT(slt1(ItemsList)));
- QObject::connect(&sender, SIGNAL(sig3(ItemsList)), &receiver1, SLOT(slt3(ItemsList)));
- qRegisterMetaType<ItemsList>("ItemsList");
- QObject::connect(&sender, SIGNAL(sig1(ItemsList)), &receiver2, SLOT(slt1(ItemsList)), Qt::QueuedConnection);
- QObject::connect(&sender, SIGNAL(sig1(ItemsList)), &receiver2, SLOT(slt3(ItemsList)), Qt::QueuedConnection);
- QObject::connect(&sender, SIGNAL(sig3(ItemsList)), &receiver2, SLOT(slt1(ItemsList)), Qt::QueuedConnection);
- QObject::connect(&sender, SIGNAL(sig3(ItemsList)), &receiver2, SLOT(slt3(ItemsList)), Qt::QueuedConnection);
- sender.emitslots();
- return a.exec();
- }
|