如何获得类函数名称列表?Qt c++

How to get class function names list? Qt C++

本文关键字:Qt c++ 列表 何获得 类函数      更新时间:2023-10-16

例如,我有这样的代码:

class MyClass : public QObject
{
    Q_OBJECT
public:
    void MyClass()
    {
    QStringList selfFunctionList;
    //Get functions list
    qDebug()<<selfFunctionList;
    }
    void function1(){}
    void function435(){}
};

如何设置"function1"answers"function435"的selfFunctionList列表?

您可以使用staticMetaObject

class Test : public QObject
{
    Q_OBJECT
public:
    explicit Test(QObject *parent = 0) :
        QObject(parent)
    {
        for (int n = 0; n < staticMetaObject.methodCount(); n++) {
           functions.append(QString::fromLocal8Bit(staticMetaObject.method(n).name()));
        }
        qDebug() << functions;
    }
signals:
    void testSignal();
private slots:   
    void privateTestFunction() {}
public slots:   
    void publicTestFunction() {}
private:
    QStringList functions;
};

一个条件,函数需要声明为槽或信号。

输出:

("destroyed","destroyed","objectNameChanged","deleteLater","_q_reregisterTimers",
"testSignal","privateTestFunction","publicTestFunction")

c++没有您在这里想要的那种自我意识(反射)。也就是说,如果不手工编码,就无法通过编程方式获取函数的字符串名称并将其输入到容器中。Qt用它的信号和槽做了非常有限的这方面的工作,而不是一般的功能。所以你必须写

MyClass::MyClass(...)
{
   selfFunctionList << function1 << function345 << ... etc.
}

作为构造函数,或者类似的东西

Edit: OP让我注意到这些宏,它们给了你一点内省,但是实现它们来解决OP的问题要比上面的困难得多,见注释。