使用qt5时,是否可以迭代并打印我在应用程序中创建的所有函数的名称?
例如,假设我创建了自己的类( myClass ),其中包含两个公共广告位
int add(int a, int b);
int mul(int a, int b);
我想要的是稍后能够打印 myClass 按名称包含这两个功能。
答案 0 :(得分:4)
如果您做了一些准备,可以使用QMetaObject。使用methodCount()
,您可以找到已发布方法的数量,method(int idx)
可以访问QMetaMethod
个对象。
要求是:
QObject
Q_OBJECT
宏moc
Q_INVOKABLE
<强>更新强>
对于您的示例,您可以使用此:
class MyClass : public QObject {
Q_OBJECT
public slots:
int add(int a, int b);
int mul(int a, int b);
public:
Q_INVOKABLE int notaslot();
};
int main(int argc, char**argv) {
MyClass obj;
QMetaObject *mobj = obj.metaObject();
for (int i = 0; i < mobj->methodCount(); ++i) {
QMetaMethod method = mobj->method(i);
if (method.access() == QMetaMethod::Public) {
std::cout << method.name().toStdString();
}
}
}
答案 1 :(得分:0)