J'essaie de transformer un QTableWidgetItem
en classe enfant. J'ai une hiérarchie de classes comme ceci:Comment transformer QTableWidgetItem en classe enfant personnalisée
(Parent -> Child)
QTableWidgetItem -> SortableTableWidgetItem -> EnhancedTableWidgetItem
ou
class SortableTableWidgetItem : public QTableWidgetItem
class EnhancedTableWidgetItem : public SortableTableWidgetItem
Pour la plupart, j'utilise les éléments comme QTableWidgetItem
s parce que le code est déjà écrit et shouldn ne change pas. Cependant, dans certains cas, j'ai besoin d'accéder aux données dans le EnhancedTableWidgetItem
après avoir donné un pointeur à QTableWidgetItem
(que je sais est un EnhancedTableWidgetItem
parce que j'ai construit l'objet et l'ai passé au code appelant initialement). J'ai essayé de lancer comme ceci:
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);
Je viens du monde de Java où ceci est parfaitement légal et fait tout le temps. Pourquoi ne puis-je pas convertir le pointeur de classe de base en pointeur de classe enfant? Comment puis-je accomplir cela?
Ouais désolé, j'ai raté le pointeur dans le message initial. C'est dans le code cependant. Merci pour l'explication! –
il s'agit d'un comportement non défini pour transformer la superclasse en sous-classe si vous n'utilisez pas de pointeurs – UmNyobe