QVariant自定义类的多态性
QVariant custom classes polymorphism
我有这样一个类层次结构:
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
的指针,并调用该指针上的函数。
相关文章:
- 多态性和功能结合
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- C++boost序列化多态性问题
- 如何查找哪个类对象位于数组的特定索引上(多态性)
- 如何在多线程中正确使用unique_ptr进行多态性?
- 具有智能指针的多态性
- 在 C++ 中在堆栈上创建实例时如何保持多态性?
- 继承/多态性 - 我是否被迫使用"protected"变量?
- C++ 多态性在代码::块 17.12 中不起作用
- C++ 泛型和多态性:这种模式可行吗?
- 为什么我们实际上需要运行时多态性?
- C++多态性:如何测试一个类是否派生自另一个基类
- 如何避免具有aligned_storage和多态性的未定义行为
- 在多态性中重新定义功能(虚拟),具有不同数量的参数
- 收到未定义的引用错误 c++ 继承/多态性
- C 模板和多态性无缝合用户定义的转换
- 在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
- 通过多态性和指针C++自定义异构容器
- QVariant自定义类的多态性