Nik*_*las 13 c++ inheritance qt
我有一个Common继承自的超类QObject.然后我有一个Item继承自的类Common.
COMMON.H
class Common : public QObject {
Q_OBJECT
public:
// some methods
};
Run Code Online (Sandbox Code Playgroud)
Item.h
class Item : public Common {
Q_OBJECT
public:
// some methods
void test(QString value);
};
Run Code Online (Sandbox Code Playgroud)
Item.cpp
void Item::test(QString value) {
qDebug() << value;
}
Run Code Online (Sandbox Code Playgroud)
我想用来QMetaObject::invokeMethod动态调用一个函数.所以我在Item类中实现了一个测试函数,它只需要一个字符串.
Item* item = new Item();
QMetaObject::invokeMethod(item, "test", Qt::DirectConnection, Q_ARG(QString, "1234"));
Run Code Online (Sandbox Code Playgroud)
这不起作用.我得到以下错误:QMetaObject::invokeMethod: No such method Common::test(QString),这是完全没问题,因为Common该类没有任何test功能.
我QMetaObject::invokeMethod该如何判断它应该从Item类中调用该方法?
lee*_*mes 26
QMetaObject::invokeMethod只能调用Qt元对象系统已知的方法.这些是插槽和"可调用"函数,后者Q_INVOKABLE在它们之前使用关键字.
所以要么写:
class Item : public Common {
Q_OBJECT
public slots:
// ^^^^^
void test(QString value);
};
Run Code Online (Sandbox Code Playgroud)
要么:
class Item : public Common {
Q_OBJECT
public:
Q_INVOKABLE void test(QString value);
//^^^^^^^^^
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8198 次 |
| 最近记录: |