Qt多元素控件之QTreeWidget

张开发
2026/5/12 10:12:07 15 分钟阅读

分享文章

Qt多元素控件之QTreeWidget
Qt多元素控件之QTreeWidget1.QTreeWidget基本情况2.代码演示hello各位读者大大们你们好呀系列专栏【Qt的学习】本篇内容QTreeWidget基本情况代码演示⬆⬆⬆⬆上一篇Qt多元素控件之QTableWidget作者简介轩情吖请多多指教( •̀֊•́ ) ̖́-1.QTreeWidget基本情况QTreeWidget它是一个树型控件它的每个元素都是一个QTreeWidgetItem每个QTreeWidgetItem都可以包含多个文本或图标每个图标/文本为一列。但是这里的树型结构和数据结构中学的有一点不一样它是没有根结点的是从我们所认为的“根结点”下一层开始的被称为顶层结点我们可以给QTreeWidget设置很多个顶层结点然后再给顶层结点添加子结点这样就可以构成树型结构接下来看一下QTreeWidget的相关函数函数声明函数说明void clear()清空所有子结点void addTopLevelItem(QTreeWidgetItem* item)新增顶层结点QTreeWidgetItem *topLevelItem(int index) const获取指定下标的顶层结点int topLevelItemCount() const获取顶层结点的数量int indexOfTopLevelItem(QTreeWidgetItem *item) const获取指定顶层结点的下标QTreeWidgetItem *takeTopLevelItem(int index)删除指定的顶层节点. 返回 QTreeWidgetItem* 表示被删除的元素QTreeWidgetItem *currentItem() const获取到当前选中的节点, 返回 QTreeWidgetItemvoid setCurrentItem(QTreeWidgetItem* item)设置当前选中的结点void setExpanded(bool)展开/关闭节点void setHeaderLabel(const QString text)设置 TreeWidget 的 header 名称然后是QTreeWidget的信号信号声明信号说明void currentItemChanged(QTreeWidgetItemcurrent, QTreeWidgetItemold)切换选中元素时触发void itemClicked(QTreeWidgetItem* item, int col)点击元素时触发void itemDoubleClicked(QTreeWidgetItem* item,int col)双击元素时触发void itemEntered(QTreeWidgetItem* item, int col)⿏标进⼊时触发void itemExpanded(QTreeWidgetItem* item)元素被展开时触发void itemCollapsend(QTreeWidgetItem* item)元素被折叠时触发这里还需要补充一下QTreeWidgetItem的一些使用函数函数说明函数声明void addChild(QTreeWidgetItem* child)新增子结点int childCount() const⼦节点的个数QTreeWidgetItem *child(int index) const获取指定下标的子结点 返回 QTreeWidgetItem*void takeChild(int index删除对应下标的子节点void removeChild(QTreeWidgetItem*child)删除对应的⼦节点QTreeWidgetItem *parent() const获取该元素的父节点2.代码演示#includewidget.h#includeui_widget.hWidget::Widget(QWidget*parent):QWidget(parent),ui(newUi::Widget){ui-setupUi(this);//设置根结点的标题, 仅用于描述各列数据的含义不会作为独立的结点存在ui-treeWidget-setHeaderLabel(动物);//ui-treeWidget-setColumnCount(2);//创建顶层结点QTreeWidgetItem*item1newQTreeWidgetItem;//在第一列中进行设置(可以设置不止一列)item1-setText(0,狗);//将顶层结点进行添加ui-treeWidget-addTopLevelItem(item1);QTreeWidgetItem*item2newQTreeWidgetItem;item2-setText(0,猫);ui-treeWidget-addTopLevelItem(item2);QTreeWidgetItem*item3newQTreeWidgetItem;item3-setText(0,鸟);item3-setText(1,乌龟);ui-treeWidget-addTopLevelItem(item3);//添加子结点// 创建子结点QTreeWidgetItem*child_item1newQTreeWidgetItem;//在第一列中进行设置child_item1-setText(0,哈士奇);//child_item1-setText(1,金毛);//进行添加子结点item1-addChild(child_item1);QTreeWidgetItem*child_item2newQTreeWidgetItem;child_item1-setText(0,金毛);item1-addChild(child_item2);QTreeWidgetItem*child_item3newQTreeWidgetItem;child_item3-setText(0,三花);item2-addChild(child_item3);}Widget::~Widget(){deleteui;}voidWidget::on_pushButton_addTop_clicked(){//创建新顶层结点QTreeWidgetItem*topItemnewQTreeWidgetItem;//获取顶层结点命名constQStringstr(ui-lineEdit-text());//进行设置topItem-setText(0,str);//进行添加ui-treeWidget-addTopLevelItem(topItem);}voidWidget::on_pushButton_addSelect_clicked(){//获取当前选中的结点QTreeWidgetItem*currentui-treeWidget-currentItem();if(currentnullptr){return;}//创建新结点QTreeWidgetItem*itemnewQTreeWidgetItem;//获取文本constQStringstr(ui-lineEdit-text());//对结点进行设置item-setText(0,str);//进行设置子结点current-addChild(item);}voidWidget::on_pushButton_deleteSelect_clicked(){//找到当前结点QTreeWidgetItem*currentui-treeWidget-currentItem();if(currentnullptr){return;}//分别对顶层结点和子结点进行处理QTreeWidgetItem*parentcurrent-parent();if(parentnullptr){//顶层结点intindexui-treeWidget-indexOfTopLevelItem(current);ui-treeWidget-takeTopLevelItem(index);}else{//子结点parent-removeChild(current);}}上述这几个控件的相关操作数据都是保存在内存中的因此无论在界面上做什么操作只要重新运行程序之前的数据就没了Qt多元素控件之QTreeWidget大概就讲到这里啦博主后续会继续更新更多Qt的相关知识干货满满如果觉得博主写的还不错的话希望各位小伙伴不要吝啬手中的三连哦如有小伙伴需要Qt的安装包可以私信我你们的支持是博主坚持创作的动力

更多文章