我有这样一个类层次结构:
class Base {
...
virtual QWidget* getEditor();
...
}
class Derived {
...
QWidget* getEditor() Q_DECL_OVERRIDE;
...
}
两个类都是通过Q_DECLARE_METATYPE()注册的
我从QVariant获得基类的实例。是否有可能从QVariant获得指针以能够从派生对象调用getEditor()
?
我正在尝试这个atm,但是没有成功。
if (index.data(Qt::EditRole).canConvert<Base>())
return index.data(Qt::EditRole).value<Base>().getEditor(parent);
您需要使基类的函数virtual
启用多态性:
class Base {
...
virtual QWidget* getEditor();
...
}
class Derived {
...
QWidget* getEditor() Q_DECL_OVERRIDE;
...
}
同样,你现在使用它的方式会导致对象切片。你需要获取一个指向Derived
的指针,并调用该指针上的函数。