0

我认为这不是关于特别是 Qt 的问题,而是缺乏编程经验的问题。

我从 QTreeWidgetItem 派生了一个类,并添加了一些布尔标志。当我初始化 QTreeWidget 时,我添加了其中的两个

_NewItem1=MyQTreeWidgetItem(_treewidget);

后来我添加了一些项目

_NewItem1_1=MyQTreeWidgetItem(_NewItem1);
_NewItem1_1->boleanvalue1=true;

如果我以后想退回这些物品,我会打电话

(MyQTreeWidgetItem)_NewItem1->child(i)

但这当然只是返回一个带有新初始化的布尔标志的 MyQTreeWidgetItem 。

我是否必须重写子函数才能重新调整我之前初始化的真实项目?

4

1 回答 1

1

_NewItem1->child(i)返回指向 的指针QTreeWidgetItem,它是 的基类MyQTreeWidgetItem。你已经投是平安地MyQTreeWidgetItem,考虑到它也可能是真实的QTreeWidgetItem。这是通过C++ 中的dynamic_cast实现的,它在运行时检查类型。

QTreeWidgetItem *item = _NewItem1->child(i);
MyQTreeWidgetItem *myItem = dynamic_cast<MyQTreeWidgetItem>(item);
if (myItem) {
    qDebug() << myItem->boleanvalue1;
} else {
    qDebug() << item << "is not of type MyQTreeWidgetItem";
}

另一方面,类型转换运算符()允许将任何类型转换为任何其他类型而无需任何检查,如果这种转换是可能的。例如,您已将指针转换QTreeWidget为类型的对象MyQTreeWidgetItem。对变量的后续访问将产生运行时错误或意外结果。

于 2012-11-06T12:29:59.250 回答