首页 > 其他 > 详细

QTreeWidget更新后保存节点的展开状态

时间:2020-05-06 20:53:04      阅读:303      评论:0      收藏:0      [点我收藏+]
class Xx : public QWidget
{
  Q_OBJECT

  struct ItemState{
    ItemState();
    int _id;
    bool _isExpend;
  };

public:
  Xx(QWidget *parent = 0);
  ~Xx();

  void updateTree();

private:
  void saveItemState();
  void popItemState();
  const ItemState itemState(int id);

private:
  Ui::Xx ui;
  QVector<ItemState> _itemState;
};

  

Xx::ItemState::ItemState(){
  _isExpend = true;
  _id = -1;
}

void Xx::updateTree(){
  saveItemState();//更新前保存展开状态

  ui.treeWidget->clear();

  QTreeWidgetItem *rootItem = new QTreeWidgetItem(ui.treeWidget);
  rootItem->setText(0, "xx");
  rootItem->setData(0, Qt::UserRole,QString::number(id));
  rootItem->setExpanded(true);

  popItemState();//恢复展开状态
}

void Xx::saveItemState(){
  _itemState.clear();
  QTreeWidgetItemIterator it(ui.treeWidget);
  while (*it){
    ItemState itemState;
    itemState._id = (*it)->data(0, Qt::UserRole).toInt();
    itemState._isExpend = (*it)->isExpanded();
    _itemState.push_back(itemState);
    ++it;
  }
}

void Xx::popItemState(){
  QTreeWidgetItemIterator it(ui.treeWidget);
  QTreeWidgetItem *curItem(*it);
  while (*it){
    ItemState state = itemState((*it)->data(0, Qt::UserRole).toInt());
    if(state.id != -1){
      (*it)->setExpanded(state._isExpend);
    }
    ++it;
  }
}

const ShowCtrlWgt::ItemState ShowCtrlWgt::itemState(int id){
  ItemState state;
  for each (ItemState var in _itemState){
    if (var._id == id) 
      return var;
  }
  return state;
}

  原文来自微信公众号"程序员成长日志",已经工作的程序员朋友可以关注下,分享日常工作中解决的问题即可赚取稿费,大家一起成长~
技术分享图片

QTreeWidget更新后保存节点的展开状态

原文:https://www.cnblogs.com/czrz1024/p/12837540.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!