当前位置:   article > 正文

Qt QTreeWidget使用教程代码讲解_自定义qtreewidgetitem

自定义qtreewidgetitem

这篇文章主要为大家详细介绍了Qt中QTreeWidget使用的相关资料,文中的示例代码讲解详细,对我们学习Qt有一定的帮助,感兴趣的小伙伴可以了解一下

目录

  • 一.常用API设置
  • 二.设置带checkBox
  • 三.右键菜单
  • 四.设置qss
  • 五.运行效果
  • 六.多列树

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

一、常用API设置

1.添加顶层节点

  1. //添加顶层节点
  2. QTreeWidgetItem *topItem1 = new QTreeWidgetItem(ui->treeWidget);
  3. topItem1->setText(0,"百度");
  4. ui->treeWidget->addTopLevelItem(topItem1);

2.设置表头隐藏,展开所有项

  1. //隐藏表头
  2. ui->treeWidget->setHeaderHidden(true);
  3. //设置展开
  4. ui->treeWidget->expandAll();

3.顶层节点添加子节点

  1. QTreeWidgetItem *item11 = new QTreeWidgetItem(topItem1);
  2. item11->setText(0,"研发部");
  3. QTreeWidgetItem *item12 = new QTreeWidgetItem(topItem1);
  4. item12->setText(0,"销售部");
  5. QTreeWidgetItem *item13 = new QTreeWidgetItem(topItem1);
  6. item13->setText(0,"人事部");

4.节点可以带一些数据,使用setData()这个接口

  1. //设置数据,可以带多种数据
  2. item11->setData(0,Qt::UserRole,100/*人员数量*/);
  3. item11->setData(0,Qt::UserRole+1,"李彦宏"/*负责人名字*/);
  4. //获得数据
  5. item11->data(0,Qt::UserRole).toInt();
  6. item11->data(0,Qt::UserRole+1).toString();

5.节点可以设置自定义类型,设置图标、flags、文本

  1. //自定义枚举
  2. enum NodeType
  3. {
  4. ROOT = 0,
  5. SON
  6. };
  7. QTreeWidgetItem *item = new QTreeWidgetItem(ROOT);
  8. //item->setIcon();
  9. //item->setText();
  10. //item->setFlags();

二、设置带checkBox

  1. QTreeWidgetItem *topItem2 = new QTreeWidgetItem(ui->treeWidget);
  2. topItem2->setText(0,"腾讯");
  3. topItem2->setCheckState(0,Qt::Checked);
  4. ui->treeWidget->addTopLevelItem(topItem2);
  5. QTreeWidgetItem *item21 = new QTreeWidgetItem(topItem2);
  6. item21->setText(0,"研发部");
  7. item21->setCheckState(0,Qt::Checked);
  8. QTreeWidgetItem *item22 = new QTreeWidgetItem(topItem2);
  9. item22->setText(0,"销售部");
  10. item22->setCheckState(0,Qt::Checked);
  11. QTreeWidgetItem *item23 = new QTreeWidgetItem(topItem2);
  12. item23->setText(0,"人事部");
  13. item23->setCheckState(0,Qt::Checked);

简单的响应一下点击信号,当顶层节点选中,下面的所有子节点全选中

  1. connect(ui->treeWidget,&QTreeWidget::itemClicked,this,
  2. &Form::slotClicked);
  3. void Form::slotClicked(QTreeWidgetItem *item, int column)
  4. {
  5. //简单响应一下选中状态槽函数
  6. for (int i=0; i<item->childCount(); i++)
  7. {
  8. QTreeWidgetItem *pChildItem = item->child(i);
  9. pChildItem->setCheckState(0,item->checkState(0));
  10. }
  11. }

三、右键菜单

  1. //打开右键菜单属性
  2. ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
  3. //右键菜单
  4. m_menu = new QMenu(ui->treeWidget);
  5. m_menu->addAction("添加");
  6. m_menu->addAction("删除");
  7. //响应右键菜单信号槽
  8. connect(ui->treeWidget,&QTreeWidget::customContextMenuRequested,
  9. this,&Form::slotMenuPopup);
  10. void Form::slotMenuPopup(const QPoint &pos)
  11. {
  12. m_menu->exec(ui->treeWidget->mapToGlobal(pos));
  13. }

四、设置qss

这里简单设置一下背景色,展开/合并时的图标,item的一些设置,仅供参考。

  1. const QString styles = "QTreeView\
  2. {\
  3. background-color: #5B677A;\
  4. font-size:17px;\
  5. color: white;\
  6. }\
  7. QTreeView::item:hover\
  8. {\
  9. background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1);\
  10. border: 1px solid #bfcde4;\
  11. }\
  12. QTreeView::item:hover\
  13. {\
  14. background: rgb(69, 187, 217);\
  15. }\
  16. QTreeView::item:selected:active\
  17. {\
  18. background: rgb(63, 147, 168);\
  19. }\
  20. QTreeView::item:selected:!active\
  21. {\
  22. background: rgb(63, 147, 168);\
  23. }\
  24. QTreeView::branch\
  25. {\
  26. background:#5B677A;\
  27. }\
  28. QTreeView::branch:has-children:!has-siblings:closed,QTreeView::branch:closed:has-children:has-siblings\
  29. {\
  30. border-image: none;\
  31. background:#5B677A;\
  32. image: url(image/Folder-1.png);\
  33. }\
  34. QTreeView::branch:open:has-children:!has-siblings,QTreeView::branch:open:has-children:has-siblings\
  35. {\
  36. border-image: none;\
  37. background:#5B677A;\
  38. image: url(image/Open-Folder.png);\
  39. }";

调用ui->treeWidget->setStyleSheet(styles);就行了

五、运行效果

六、多列树

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. #include <QDebug>
  4. const QString sstyle = "\
  5. QHeaderView::section\
  6. {\
  7. background-color: white;\
  8. }";
  9. Widget::Widget(QWidget *parent) :
  10. QWidget(parent),
  11. ui(new Ui::Widget)
  12. {
  13. ui->setupUi(this);
  14. QStringList strList;
  15. strList<<"名称"<<"年龄"<<"性别";
  16. ui->treeWidget->setHeaderLabels(strList);
  17. ui->treeWidget->header()->setStyleSheet(sstyle);
  18. QTreeWidgetItem *item1 = new QTreeWidgetItem(QStringList()<<"七年级");
  19. ui->treeWidget->addTopLevelItem(item1);
  20. QTreeWidgetItem *item11 = new QTreeWidgetItem(QStringList()<<"小涨"<<"13"<<"男");
  21. item1->addChild(item11);
  22. QTreeWidgetItem *item12 = new QTreeWidgetItem(QStringList()<<"小红"<<"14"<<"女");
  23. item1->addChild(item12);
  24. QTreeWidgetItem *item13 = new QTreeWidgetItem(QStringList()<<"小丽"<<"13"<<"女");
  25. item1->addChild(item13);
  26. QTreeWidgetItem *item2 = new QTreeWidgetItem(QStringList()<<"八年级");
  27. ui->treeWidget->addTopLevelItem(item2);
  28. QTreeWidgetItem *item21 = new QTreeWidgetItem(QStringList()<<"小涨"<<"13"<<"男");
  29. item2->addChild(item21);
  30. QTreeWidgetItem *item22 = new QTreeWidgetItem(QStringList()<<"小红"<<"14"<<"女");
  31. item2->addChild(item22);
  32. QTreeWidgetItem *item23 = new QTreeWidgetItem(QStringList()<<"小丽"<<"13"<<"女");
  33. item2->addChild(item23);
  34. QTreeWidgetItem *item3 = new QTreeWidgetItem(QStringList()<<"九年级");
  35. ui->treeWidget->addTopLevelItem(item3);
  36. QTreeWidgetItem *item31 = new QTreeWidgetItem(QStringList()<<"小涨"<<"13"<<"男");
  37. item3->addChild(item31);
  38. QTreeWidgetItem *item32 = new QTreeWidgetItem(QStringList()<<"小红"<<"14"<<"女");
  39. item3->addChild(item32);
  40. QTreeWidgetItem *item33 = new QTreeWidgetItem(QStringList()<<"小丽"<<"13"<<"女");
  41. item3->addChild(item33);
  42. }
  43. Widget::~Widget()
  44. {
  45. delete ui;
  46. }
  47. void Widget::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)
  48. {
  49. qDebug()<<item->text(0);
  50. qDebug()<<item->text(1);
  51. qDebug()<<item->text(2);
  52. }

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(Qt实战项目,C++语言基础,C++设计模式,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号