0

一个很好的简单例子会很好。就我而言,我有大约 200 个独特的插槽,我想将它们附加到一个列表中,然后使用迭代的“for”循环设置各种连接。

4

3 回答 3

4

要检索 QObject 方法(信号、槽等)的签名,您可以使用元对象 ( QMetaObject) 信息。例如以下代码(取自 Qt 文档)提取对象的所有方法的签名:

const QMetaObject* metaObject = obj->metaObject();
QStringList methods;
for(int i = metaObject->methodOffset(); i < metaObject->methodCount(); ++i) {
    if (metaObject->method(i).methodType() == QMetaMethod::Slot) {
        methods << QString::fromLatin1(metaObject->method(i).signature());
    }
}

要检查方法是槽还是信号,可以使用QMetaMethod::methodType()函数。用于签名QMetaMethod::signature()(请参阅上面的示例)。

QMetaObject 参考

于 2013-09-14T20:25:30.980 回答
1

这个回复是在论坛上提供给我的。我在这里发布以供参考:

QList<const char*> slotList;
slotList << SLOT(slot1());
slotList << SLOT(slot2());
// ...

for(int i=0; i< listOfButtons.size();++i) {
connect(listOfButtons->at(i), SIGNAL(clicked()), this, slotList.at(i));
}

http://www.qtcentre.org/threads/56224-A-list-for-storing-member-functions-slots

于 2013-09-15T16:06:11.910 回答
0
  1. 使用QObject::metaObject()方法获取类的QMetaObject 。
  2. 使用QMetaObject::methodCount()检索许多所有方法。
  3. 遍历所有方法索引使用QMetaObject::method()来获取QMetaMethod
  4. 使用QMetaMethod::methodType()可以检查方法是否是插槽。
  5. 添加插槽的签名(QMetaMethod::signature())以列出以供以后在connect().
于 2013-09-14T18:48:29.083 回答