如何在Qt中列出专用插槽?
一个简单的好例子就好了。就我而言,我有大约200个独特的插槽,我想添加到一个列表中,然后使用迭代的“For”循环设置各种连接如何在Qt中列出专用插槽?,qt,qlist,Qt,Qlist,一个简单的好例子就好了。就我而言,我有大约200个独特的插槽,我想添加到一个列表中,然后使用迭代的“For”循环设置各种连接 获取类的使用方法 使用检索许多所有方法 遍历用于获取的所有方法索引 使用它可以检查方法是否为插槽 将插槽的签名()添加到列表中,以便以后在connect()中使用 获取类的使用方法 使用检索许多所有方法 遍历用于获取的所有方法索引 使用它可以检查方法是否为插槽 将插槽的签名()添加到列表中,以便以后在connect()中使用 要检索QObject方法(信号、插槽等)的签名
connect()
中使用connect()
中使用要检索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());
}
}
const QMetaObject*metaObject=obj->metaObject();
QST方法;
对于(int i=metaObject->methodOffset();imethodCount();++i){
if(元对象->方法(i).methodType()==QMetaMethod::Slot){
方法(一)签名法;
}
}
要检查该方法是插槽还是信号,可以使用QMetaMethod::methodType()
函数。对于签名,请使用QMetaMethod::signature()
(请参阅上面的示例)
要检索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());
}
}
const QMetaObject*metaObject=obj->metaObject();
QST方法;
对于(int i=metaObject->methodOffset();imethodCount();++i){
if(元对象->方法(i).methodType()==QMetaMethod::Slot){
方法(一)签名法;
}
}
要检查该方法是插槽还是信号,可以使用QMetaMethod::methodType()
函数。对于签名,请使用QMetaMethod::signature()
(请参阅上面的示例)
我在一个论坛上收到了这个回复。我将其张贴在此处以供参考:
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));
}
QList slotList;
slotList这个回复是在一个论坛上提供给我的。我将其张贴在此处以供参考:
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));
}
QList slotList;
slotList您正在处理所有方法,而不仅仅是插槽<应该验证方法(i)
的code>methodType
值。@MarekR,虽然我提到了QMetaMethod::methodType()的用法,但无论如何,我已经相应地更新了示例代码。您正在处理所有方法,而不仅仅是插槽<应该验证方法(i)
的code>methodType
值。@MarekR,尽管我提到了QMetaMethod::methodType()的用法,但无论如何,我已经相应地更新了示例代码。