如何在Qt中列出私人老虎机?

时间:2013-09-14 18:29:53

标签: qt qlist

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

3 个答案:

答案 0 :(得分:4)

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

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

要检查方法是插槽还是信号,可以使用QMetaMethod::methodType()功能。签名使用QMetaMethod::signature()(参见上面的例子)。

QMetaObject reference

答案 1 :(得分: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

答案 2 :(得分:0)

  1. 使用QMetaObject方法获取课程QObject::metaObject()
  2. 使用QMetaObject::methodCount()检索所有方法。
  3. 迭代所有方法索引,使用QMetaObject::method()获取QMetaMethod
  4. 使用QMetaMethod::methodType()可以检查方法是否为插槽。
  5. 添加列表(QMetaMethod::signature())列表以便以后在connect()中使用。