• 13179阅读
  • 3回复

[提问]求一个QTreeWidget递归遍历所有QTreeWidgetItem的代码 [复制链接]

上一主题 下一主题
离线hcaihao
 

只看楼主 倒序阅读 楼主  发表于: 2012-01-06
http://hi.baidu.com/yy73/blog/item/ce458b18d7bd29b14bedbc4e.html

网上贴的这个是错误的,如果要遍历的内容不是在第一个top Item里面,就返回0了。

离线jdwx

只看该作者 1楼 发表于: 2012-01-06
回 楼主(hcaihao) 的帖子
QTreeWidgetItem *IglMainWindow::iglGetFlowTreeWidgetItem( const QString &flow, QTreeWidgetItem *parent)
{

int cnt =parent?parent->childCount() : _flowTreeWidget->topLevelItemCount();
for (int i=0; i<cnt; i++) {
    QTreeWidgetItem *item = parent? parent->child( i) : _flowTreeWidget->topLevelItem( i) ;
    if (item->text(0).compare( flow ) == 0) {
      return item;
    }
    if (item->childCount() > 0) {
      return iglGetFlowTreeWidgetItem( flow, item );
    }

}
return 0;
}
这个函数没看出来有什么问题。
使用的时候,QTreeWidgetItem *item  =  iglGetFlowTreeWidgetItem("ABC");
不要用第二个参数。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线hcaihao

只看该作者 2楼 发表于: 2012-01-08
QTreeWidgetItem* MyTreeWidget::myGetItem(int id, QTreeWidgetItem *parent)
{
    int cnt = parent ? parent->childCount() : topLevelItemCount();

    for(int i=0; i<cnt; i++)
    {
        QTreeWidgetItem *item = parent ? parent->child(i) : topLevelItem(i);
        qDebug() << item->text(0);
        if (item->data(0, Qt::UserRole).toInt() == id)
        {
            return item;
        }

        if (item->childCount() > 0)
        {
            QTreeWidgetItem* myItem = myGetItem(id, item);
            if(myItem)
            {
                return myItem;
            }
        }
    }

    return NULL;
}



我改了一下ok了,原来的写法在iglGetFlowTreeWidgetItem( flow, item );第一次遍历为NULL的时候直接返回了。
离线zzh12215
只看该作者 3楼 发表于: 2012-04-28
qt有现成的类,很简单的

QTreeWidgetItemIterator it(treeWidget);
     while (*it) {
        //对(*it)进行处理,(*it)就是QTreeWidgetItem *类型的,比如(*it)->text(0)
         ++it;
     }//这个循环会对所有item进行遍历,方式为 先序遍历


http://www.qtcn.org/bbs/read.php?tid=48565
快速回复
限100 字节
 
上一个 下一个