QVariant自定义类多态

时间:2015-09-28 13:42:10

标签: c++ qt qvariant

我有这样的类层次结构:

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类方法。

1 个答案:

答案 0 :(得分:1)

你需要建立你的基础课程&#39;函数virtual启用多态:

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

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

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