如何在Qt中列出专用插槽?

如何在Qt中列出专用插槽?,qt,qlist,Qt,Qlist,一个简单的好例子就好了。就我而言,我有大约200个独特的插槽,我想添加到一个列表中,然后使用迭代的“For”循环设置各种连接 获取类的使用方法 使用检索许多所有方法 遍历用于获取的所有方法索引 使用它可以检查方法是否为插槽 将插槽的签名()添加到列表中,以便以后在connect()中使用 获取类的使用方法 使用检索许多所有方法 遍历用于获取的所有方法索引 使用它可以检查方法是否为插槽 将插槽的签名()添加到列表中,以便以后在connect()中使用 要检索QObject方法(信号、插槽等)的签名

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

  • 获取类的使用方法
  • 使用检索许多所有方法
  • 遍历用于获取的所有方法索引
  • 使用它可以检查方法是否为插槽
  • 将插槽的签名()添加到列表中,以便以后在
    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()的用法,但无论如何,我已经相应地更新了示例代码。