一个很好的简单例子会很好。就我而言,我有大约 200 个独特的插槽,我想将它们附加到一个列表中,然后使用迭代的“for”循环设置各种连接。
问问题
1328 次
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()
(请参阅上面的示例)。
于 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
- 使用QObject::metaObject()方法获取类的QMetaObject 。
- 使用QMetaObject::methodCount()检索许多所有方法。
- 遍历所有方法索引使用QMetaObject::method()来获取QMetaMethod。
- 使用QMetaMethod::methodType()可以检查方法是否是插槽。
- 添加插槽的签名(QMetaMethod::signature())以列出以供以后在
connect()
.
于 2013-09-14T18:48:29.083 回答