如何将QTableWidgetItem转换为自定义子类
How to cast QTableWidgetItem to custom child class
我试图将QTableWidgetItem
转换为子类。我有一个这样的类层次结构:
(Parent -> Child)
QTableWidgetItem -> SortableTableWidgetItem -> EnhancedTableWidgetItem
或
class SortableTableWidgetItem : public QTableWidgetItem
class EnhancedTableWidgetItem : public SortableTableWidgetItem
在大多数情况下,我使用项目作为QTableWidgetItem
s,因为该代码已经编写并且不应该更改。然而,在某些情况下,我需要访问EnhancedTableWidgetItem
中的数据后被给予一个指向QTableWidgetItem
的指针(我知道是EnhancedTableWidgetItem
,因为我构造了对象,并将其传递给最初的调用代码)。我试过这样的铸型:
QTableWidgetItem item = getItem();
// This fails to compile saying "error: no matching function for call to ‘qobject_cast(QTableWidgetItem*)’"
EnhancedTableWidgetItem *eItem = qobject_cast<EnhancedTableWidgetItem*>( item );
// This also fails to compile and says: "error: invalid conversion from ‘QTableWidgetItem*’ to ‘EnhancedTableWidgetItem*’"
EnhancedTableWidgetItem *eItem = dynamic_cast<EnhancedTableWidgetItem*>( item );
我来自Java世界,在那里这是完全合法的,而且一直都在做。为什么我不能将基类指针转换为子类指针?我怎样才能做到这一点呢?
qobject_cast
仅适用于继承QObject
的类。如果item
真的是你自定义的类型,那么使用动态强制转换
EnhancedTableWidgetItem* eItem = dynamic_cast<EnhancedTableWidgetItem*>( item );
无所谓。将对象强制转换为指针。不工作。我之前说的仍然适用
你把指针和值搞混了。我认为你的getItem()
不应该返回值(复制),它应该返回一个指针,所以有这个:
QTableWidgetItem *item = getItem(); // getItem() returns pointer
auto eItem = dynamic_cast<EnhancedTableWidgetItem*>( item );
(使用以上c++ 11的auto
,这更好,但如果你坚持使用旧的编译器,那么使用EnhancedTableWidgetItem*
代替)
QTableWidgetItem不是从QObject派生的,因此它不能使用qobject_cast<>
相关文章:
- 创建包装升压适配器的自定义范围类
- 自己的自定义向量类. 内存重新分配
- 自定义Vector2D类中的浮点错误
- 创建自定义向量类错误
- Arduino IDE中自定义库类的.h文件编译错误的原因是什么
- 为什么要创建自己的自定义异常类
- 为什么此自定义指针类会崩溃?
- 如何在C 中创建Logic_error的自定义派生类
- C++ 使用链表的自定义字符串类中的重载 + 运算符
- 如何对此自定义C 列表类实现删除函数
- 捕获自定义 UART 类信号
- 自定义映射类中的分段错误
- C++自定义控制台类 - 如何处理运算符未重载"<<"的对象?
- 如何制作自定义C 类QML类型
- 在自定义容器类上反转基于范围的 for 循环
- 如何在 C++ 中安全地为 char *array 重新分配内存(它适用于自定义字符串类)
- 无法创建两个从 std::logic_error 继承的自定义异常类
- 如何为我的自定义向量类实现类似 vector.insert 的方法
- 使用 boost::geometry::追加时,自定义点类中的 ID 字段间歇性丢失
- 在hadoop 2.7.4的自定义排序类中调用C函数,给出Java.lang.unsatisfiedlinkerror