QVariant自定义类多态

QVariant custom classes polymorphism

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

class Base {
...
virtual QWidget* getEditor();
...
}

class Derived {
...
QWidget* getEditor() Q_DECL_OVERRIDE;
...
}

两个 classes 都是通过 Q_DECLARE_METATYPE()

注册的

我正在从 QVariant 获取 Base class 的实例。是否可以从 QVariant 获取 pointer 以便能够从 Derived 对象调用 getEditor()

我正在尝试这个 atm 但没有成功:

if (index.data(Qt::EditRole).canConvert<Base>())
    return index.data(Qt::EditRole).value<Base>().getEditor(parent);

这个 snipper 调用 Base class 方法。

您需要使您的基础 class' 函数 virtual 启用多态性:

class Base {
...
virtual QWidget* getEditor();
...
}

class Derived {
...
QWidget* getEditor() Q_DECL_OVERRIDE;
...
}

此外,您现在的方式会导致 object slicing。您将需要获取指向 Derived 的指针,并调用该指针上的函数。