QTreeWidget更新后保存節點的展開狀態


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;
}

  原文來自微信公眾號"程序員成長日志",已經工作的程序員朋友可以關注下,分享日常工作中解決的問題即可賺取稿費,大家一起成長~
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM