QVariant自定义类的多态性

QVariant custom classes polymorphism

本文关键字:多态性 自定义 QVariant      更新时间:2023-10-16

我有这样一个类层次结构:

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的指针,并调用该指针上的函数。