QTableWidgetItem
a を子クラスにキャストしようとしています。次のようなクラス階層があります。
(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 の世界から来ました。基本クラスのポインターを子クラスのポインターにキャストできないのはなぜですか? どうすればこれを達成できますか?