分享

Qt 之tree widget和treeView控件C++语言

 大傻子的文渊阁 2022-11-12

一、tree widget和tree View控件

其实tree widget和tree view这两个树型控件也是用的比较常见的控件之一,tree widget可以将另一个UI当成item插入到tree widget中。

二、tree widget添加父节点

  1. QTreeWidgetItem *pWItem1 = new QTreeWidgetItem(ui.treeWidget);
  2. pWItem1->setText(0, QString::fromLocal8Bit("人族"));
  3. ui.treeWidget->addTopLevelItem(pWItem1);
  4. QTreeWidgetItem *pWItem2 = new QTreeWidgetItem(ui.treeWidget);
  5. pWItem2->setText(0, QString::fromLocal8Bit("兽族"));
  6. ui.treeWidget->addTopLevelItem(pWItem2);
  7. QTreeWidgetItem *pWItem3 = new QTreeWidgetItem(ui.treeWidget);
  8. pWItem3->setText(0, QString::fromLocal8Bit("不死族"));
  9. ui.treeWidget->addTopLevelItem(pWItem3);
  10. QTreeWidgetItem *pWItem4 = new QTreeWidgetItem(ui.treeWidget);
  11. pWItem4->setText(0, QString::fromLocal8Bit("精灵"));
  12. ui.treeWidget->addTopLevelItem(pWItem4);

三、tree widget添加子节点

  1. QTreeWidgetItem *item11 = new QTreeWidgetItem(pWItem1);
  2. item11->setText(0, QString::fromLocal8Bit("大法师"));
  3. QTreeWidgetItem *item12 = new QTreeWidgetItem(pWItem1);
  4. item12->setText(0, QString::fromLocal8Bit("MK"));
  5. QTreeWidgetItem *item13 = new QTreeWidgetItem(pWItem1);
  6. item13->setText(0, QString::fromLocal8Bit("帕拉丁"));
  7. QTreeWidgetItem *item21 = new QTreeWidgetItem(pWItem2);
  8. item21->setText(0, QString::fromLocal8Bit("大法师"));
  9. QTreeWidgetItem *item22 = new QTreeWidgetItem(pWItem2);
  10. item22->setText(0, QString::fromLocal8Bit("MK"));
  11. QTreeWidgetItem *item23 = new QTreeWidgetItem(pWItem2);
  12. item23->setText(0, QString::fromLocal8Bit("帕拉丁"));
  13. QTreeWidgetItem *item31 = new QTreeWidgetItem(pWItem3);
  14. item31->setText(0, QString::fromLocal8Bit("DK"));
  15. QTreeWidgetItem *item32 = new QTreeWidgetItem(pWItem3);
  16. item32->setText(0, QString::fromLocal8Bit("LICH"));
  17. QTreeWidgetItem *item33 = new QTreeWidgetItem(pWItem3);
  18. item33->setText(0, QString::fromLocal8Bit("小黑"));
  19. QTreeWidgetItem *item41 = new QTreeWidgetItem(pWItem4);
  20. item41->setText(0, QString::fromLocal8Bit("DH"));
  21. QTreeWidgetItem *item42 = new QTreeWidgetItem(pWItem4);
  22. item42->setText(0, QString::fromLocal8Bit("那家"));
  23. QTreeWidgetItem *item43 = new QTreeWidgetItem(pWItem4);
  24. item43->setText(0, QString::fromLocal8Bit("KOG"));

四、tree widget点击事件获取内容关删除节点

  1. connect(ui.treeWidget, SIGNAL(itemClicked(QTreeWidgetItem *, int)), this, SLOT(SktTreeItemClicked(QTreeWidgetItem *, int)));
  2. void SktQtTest::SktTreeItemClicked(QTreeWidgetItem *item, int iCol)
  3. {
  4. QString qsVal = item->text(iCol);
  5. QTreeWidgetItem *pParent = item->parent();
  6. if (NULL != pParent)
  7. {
  8. pParent->removeChild(item);
  9. }
  10. else {
  11. ui.treeWidget->removeItemWidget(item, iCol);
  12. delete item;
  13. }
  14. }

选中某一个节点后需要判断当前节点是父节点还是子节点,如果是子节点,则通过父节点的removeChild函数删除子节点,如果是父节点则用treeWidget的removeItemWiget函数删除当前选中的父节点。

五、tree view添加父子节点

  1. QStandardItemModel *pModel = new QStandardItemModel(this);
  2. pModel->setColumnCount(1);
  3. pModel->setHeaderData(0, Qt::Horizontal, QString::fromLocal8Bit("种族"));
  4. //pModel->setHeaderData(1, Qt::Horizontal, QString::fromLocal8Bit("首发"));
  5. //pModel->setHeaderData(2, Qt::Horizontal, QString::fromLocal8Bit("二发"));
  6. //pModel->setHeaderData(3, Qt::Horizontal, QString::fromLocal8Bit("三发"));
  7. //表头隐藏
  8. //ui.treeView->setHeaderHidden(true);
  9. ui.treeView->setModel(pModel);
  10. ui.treeView->expandAll();
  11. QStandardItem *pItem1 = new QStandardItem(QString::fromLocal8Bit("人族"));
  12. QStandardItem *pItem11Child = new QStandardItem(QString::fromLocal8Bit("大法师"));
  13. QStandardItem *pItem12Child = new QStandardItem(QString::fromLocal8Bit("MK"));
  14. QStandardItem *pItem13Child = new QStandardItem(QString::fromLocal8Bit("帕拉丁"));
  15. pItem1->setChild(0, pItem11Child);
  16. pItem1->setChild(1, pItem12Child);
  17. pItem1->setChild(2, pItem13Child);
  18. pModel->setItem(0, pItem1);
  19. QStandardItem *pItem2 = new QStandardItem(QString::fromLocal8Bit("兽族"));
  20. QStandardItem *pItem21Child = new QStandardItem(QString::fromLocal8Bit("先知"));
  21. QStandardItem *pItem22Child = new QStandardItem(QString::fromLocal8Bit("牛头"));
  22. QStandardItem *pItem23Child = new QStandardItem(QString::fromLocal8Bit("小Y"));
  23. pItem2->setChild(0, pItem21Child);
  24. pItem2->setChild(1, pItem22Child);
  25. pItem2->setChild(2, pItem23Child);
  26. pModel->setItem(1, pItem2);
  27. QStandardItem *pItem3 = new QStandardItem(QString::fromLocal8Bit("不死族"));
  28. QStandardItem *pItem31Child = new QStandardItem(QString::fromLocal8Bit("DK"));
  29. QStandardItem *pItem32Child = new QStandardItem(QString::fromLocal8Bit("LICH"));
  30. QStandardItem *pItem33Child = new QStandardItem(QString::fromLocal8Bit("小黑"));
  31. pItem3->setChild(0, pItem31Child);
  32. pItem3->setChild(1, pItem32Child);
  33. pItem3->setChild(2, pItem33Child);
  34. pModel->setItem(2, pItem3);
  35. QStandardItem *pItem4 = new QStandardItem(QString::fromLocal8Bit("精灵"));
  36. QStandardItem *pItem41Child = new QStandardItem(QString::fromLocal8Bit("DH"));
  37. QStandardItem *pItem42Child = new QStandardItem(QString::fromLocal8Bit("那家"));
  38. QStandardItem *pItem43Child = new QStandardItem(QString::fromLocal8Bit("TK"));
  39. pItem4->setChild(0, pItem41Child);
  40. pItem4->setChild(1, pItem42Child);
  41. pItem4->setChild(2, pItem43Child);
  42. pModel->setItem(3, pItem4);

六、tree view点击事件获取内容关删除节点

  1. connect(ui.treeView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(SktTreeViewItemClicked(const QModelIndex &)));
  2. void SktQtTest::SktTreeViewItemClicked(const QModelIndex &index)
  3. {
  4. QString qsVal = ui.treeView->model()->itemData(index).values()[0].toString();
  5. QStandardItemModel *pModel = static_cast<QStandardItemModel*>(ui.treeView->model());
  6. QStandardItem *pItem = pModel->itemFromIndex(index);
  7. if (NULL == pItem->parent())
  8. {
  9. pModel->removeRow(index.row());
  10. return;
  11. }
  12. QStandardItem *parent = pItem->parent();
  13. parent->removeRow(index.row());
  14. }

首选获取选中的内容,然后判断是父节点还是子节点,不同的节点用不同的方法删除就可以了。

其实list view tree view list widget等这些控件都还有其他作用,欢迎大家一起探讨。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多