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
的指针,并调用该指针上的函数。
我有这样一个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
的指针,并调用该指针上的函数。