首页 文章

QVariant自定义类多态

提问于
浏览
0

我有这样的类层次结构:

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

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

这两个类都是通过Q_DECLARE_METATYPE()注册的

我从QVariant获得Base类的实例 . 是否有可能从QVariant获取 pointer 能够从Derived对象调用 getEditor()

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

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

此snipper调用Base类方法 .

1 回答

  • 1

    您需要使您的基类'function virtual 启用多态:

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

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

相关问题