我有这样的类层次结构:
class Base {
...
virtual QWidget* getEditor();
...
}
class Derived {
...
QWidget* getEditor() Q_DECL_OVERRIDE;
...
}
这两个类都是通过Q_DECLARE_METATYPE()
注册的我从QVariant获得Base类的实例。是否可以从QVariant获取指针,以便能够从Derived对象调用getEditor()
?
我正在尝试这个,但没有成功:
if (index.data(Qt::EditRole).canConvert<Base>())
return index.data(Qt::EditRole).value<Base>().getEditor(parent);
此snipper调用Base类方法。
答案 0 :(得分:1)
你需要建立你的基础课程&#39;函数virtual
启用多态:
class Base {
...
virtual QWidget* getEditor();
...
}
class Derived {
...
QWidget* getEditor() Q_DECL_OVERRIDE;
...
}
此外,您现在拥有它的方式将导致object slicing。您将需要获取指向Derived
的指针,并在该指针上调用该函数。