返回派生的QTreeWidgetItem

返回派生的QTreeWidgetItem,qt,qtreewidgetitem,Qt,Qtreewidgetitem,我认为这不是一个关于Qt的问题,而是一个缺乏编程经验的问题 我从QTreeWidgetItem派生了一个类,并添加了一些bolean标志。当我初始化一个QTreeWidget时,我通过 _NewItem1=MyQTreeWidgetItem(_treewidget); 然后我添加了一些项目 _NewItem1_1=MyQTreeWidgetItem(_NewItem1); _NewItem1_1->boleanvalue1=true; 如果我以后想退回这些物品,我会打电话给 (MyQT

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

我从QTreeWidgetItem派生了一个类,并添加了一些bolean标志。当我初始化一个QTreeWidget时,我通过

_NewItem1=MyQTreeWidgetItem(_treewidget);
然后我添加了一些项目

_NewItem1_1=MyQTreeWidgetItem(_NewItem1);
_NewItem1_1->boleanvalue1=true;
如果我以后想退回这些物品,我会打电话给

(MyQTreeWidgetItem)_NewItem1->child(i)
但这当然只是返回一个带有新初始化的bolean标志的MyQTreeWidgetItem

我是否必须重写子函数以重新运行我先前初始化的真正项目?

\u NewItem1->child(I)
返回指向
QTreeWidgetItem
的指针,该指针是
MyQTreeWidgetItem
的基类。考虑到它可能也是真实的,您可以安全地将其转换为
MyQTreeWidgetItem
。这是用C++实现的,它在运行时检查类型。
QTreeWidgetItem *item = _NewItem1->child(i);
MyQTreeWidgetItem *myItem = dynamic_cast<MyQTreeWidgetItem>(item);
if (myItem) {
    qDebug() << myItem->boleanvalue1;
} else {
    qDebug() << item << "is not of type MyQTreeWidgetItem";
}
qtreewigetitem*item=\u NewItem1->child(i);
MyQTreeWidgetItem*myItem=dynamic_cast(项目);
如果(我的项目){
qDebug()boleanvalue1;
}否则{

qDebug()如果您将创建的元素添加到小部件中,并要求小部件使用索引i获取您的子对象,那么您当然会得到与前面输入的相同的对象。子对象存储在集合中,通常是指针集合。顺便说一句,您的强制转换错误,应该是“(MyQTreeWidgetItem*)parent->child(i)'谢谢您的回答。我现在使用动态强制转换来实现此目的。但我仍然没有为我的项获取正确的值。我将bolean值初始化为true,但当我获取返回的项时,该值为false。根据您提供的代码位,您为_NewItem1_1设置了boleanvalue1,并尝试检查它是否为_NewItem1的第I个子项,这很明显ly不是同一个项目。