我有一个父类(super class)Common
,它继承自QObject
。然后,我得到了一个Item
类,该类继承自Common
。
Common.h
class Common : public QObject {
Q_OBJECT
public:
// some methods
};
Item.h
class Item : public Common {
Q_OBJECT
public:
// some methods
void test(QString value);
};
Item.cpp
void Item::test(QString value) {
qDebug() << value;
}
我想使用
QMetaObject::invokeMethod
动态调用函数。因此,我在
Item
类中实现了一个测试函数,该函数仅使用一个字符串。Item* item = new Item();
QMetaObject::invokeMethod(item, "test", Qt::DirectConnection, Q_ARG(QString, "1234"));
这是行不通的。我收到以下错误:
QMetaObject::invokeMethod: No such method Common::test(QString)
,这是完全可以的,因为Common
类没有test
函数。我怎样才能告诉
QMetaObject::invokeMethod
,它应该从Item
类调用该方法? 最佳答案
QMetaObject::invokeMethod
只能调用Qt元对象系统已知的方法。这些是插槽和“可调用”功能,后者是在其前面带有关键字Q_INVOKABLE
的功能。
所以写:
class Item : public Common {
Q_OBJECT
public slots:
// ^^^^^
void test(QString value);
};
要么:
class Item : public Common {
Q_OBJECT
public:
Q_INVOKABLE void test(QString value);
//^^^^^^^^^
};
关于c++ - QMetaObject::invokeMethod:使用继承时没有此类方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24642370/