나는 자식 클래스에 QTableWidgetItem
을 캐스팅하기 위해 노력하고있어에 QTableWidgetItem을 주조하는 방법. 그 코드가 이미 작성되어 있기 때문에사용자 정의 자식 클래스
(Parent -> Child)
QTableWidgetItem -> SortableTableWidgetItem -> EnhancedTableWidgetItem
또는 대부분의 경우
class SortableTableWidgetItem : public QTableWidgetItem
class EnhancedTableWidgetItem : public SortableTableWidgetItem
QTableWidgetItem
의 같은 항목을 사용 shouldn : 나는 수업이 같은 계층 구조를 가지고 변화는 없어. 그러나 어떤 경우에 나는 (내가 객체를 구성하고 처음 호출 코드에 전달 때문에
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);
나는 이것이 완벽하게 합법적이며 항상 수행되는 자바 세상에서왔다. 이유는 아이 클래스 포인터에 기본 클래스 포인터를 캐스팅 수없는 이유는 무엇입니까? 이것을 어떻게 할 수 있습니까?
죄송합니다. 초기 게시물의 포인터를 놓쳤습니다. 그래도 코드에 있습니다. 설명 주셔서 감사합니다! –
포인터를 사용하지 않는 경우 수퍼 클래스를 하위 클래스로 캐스팅하는 것은 정의되지 않은 동작입니다. – UmNyobe