C/C++|C/C++ Qt TreeWidget 单层树形组件应用小结
【C/C++|C/C++ Qt TreeWidget 单层树形组件应用小结】TreeWidget 目录树组件,该组件适用于创建和管理目录树结构,在开发中我们经常会把它当作一个升级版的ListView
组件使用,因为ListView
每次只能显示一列数据集,而使用TableWidget
组件显示多列显得不够美观,此时使用Tree组件显示单层结构是最理想的方式,本章博文将通过TreeWidget
实现多字段显示,并增加一个自定义菜单,通过在指定记录上右键可弹出该菜单并对指定记录进行操作。
1.通过TreeView
组件实现一个只读属性的树形目录,该目录中指定三个字段,分别用来表示ID,IP地址,用户名
字段.
初始化Tree组件
- 1.初始化并设置treeView属性
- 2.设置列头长度
- 3.设置列头数据
- 4.设置表中元素
#include#include #include #include // By: LyShark// https://www.cnblogs.com/lysharkMainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),ui(new Ui::MainWindow){ui->setupUi(this); QStandardItemModel *tree = new QStandardItemModel(0,3,this); // 设置treeView属性ui->treeView->setColumnWidth(0,300); // 设置最后一列宽度自适应ui->treeView->setIndentation(1); // 设置表头缩进为1ui->treeView->setEditTriggers(QAbstractItemView::NoEditTriggers); // 节点不可编辑// 设置列头长度ui->treeView->setColumnWidth(0,50); // 设置第1列长度ui->treeView->setColumnWidth(1,200); // 设置第2列长度ui->treeView->setColumnWidth(2,200); // 设置第3列长度// 设置列头数据tree->setHeaderData(0, Qt::Horizontal, tr("ID")); tree->setHeaderData(1, Qt::Horizontal, tr("IP地址")); tree->setHeaderData(2, Qt::Horizontal, tr("用户")); ui->treeView->setModel(tree); // 将表头设置到模型// 设置表中元素QList ptr; QStandardItem *item_uid = new QStandardItem("1001"); item_uid->setIcon(QIcon(":/image/1.ico")); ptr.push_back(item_uid); QStandardItem *item_addr = new QStandardItem("192.168.1.1"); ptr.push_back(item_addr); QStandardItem *item_username = new QStandardItem("lyshark"); ptr.push_back(item_username); tree->appendRow(ptr); }
代码运行后,如下所示:
文章图片
2.使用
TreeWidget
组件,自己定义一个菜单,并将该菜单绑定到Tree组件内,具体实现代码如下。#include "mainwindow.h"#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow){ui->setupUi(this); // 在MainWindow中使用右击菜单需要添加此项ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu); // 创建基础顶部菜单QMenuBar *bar = menuBar(); this->setMenuBar(bar); QMenu * fileMenu = bar->addMenu("菜单1"); // 实现只隐藏菜单1其他的不受影响fileMenu->menuAction()->setVisible(false); // 添加子菜单GetColumnAction = fileMenu->addAction("获取列号"); GetRowDataAction = fileMenu->addAction("获取本行数据"); GetLineAction = fileMenu->addAction("获取行号"); // 分别设置图标GetColumnAction->setIcon(QIcon(":/image/1.ico")); GetRowDataAction->setIcon(QIcon(":/image/2.ico")); GetLineAction->setIcon(QIcon(":/image/3.ico")); // 为子菜单绑定热键GetColumnAction->setShortcut(Qt::CTRL | Qt::Key_A); GetRowDataAction->setShortcut(Qt::SHIFT | Qt::Key_S); GetLineAction->setShortcut(Qt::CTRL | Qt::SHIFT | Qt::Key_B); // 设置treeWidget属性ui->treeWidget->setColumnCount(4); // 设置总列数ui->treeWidget->setColumnWidth(0,300); // 设置最后一列宽度自适应ui->treeWidget->setIndentation(1); // 设置表头缩进为1// 设置表头数据QStringList headers; headers.append("文件名"); headers.append("更新时间"); headers.append("文件类型"); headers.append("文件大小"); ui->treeWidget->setHeaderLabels(headers); // 模拟插入数据到表中for(int x=0; x<100; x++){QTreeWidgetItem* item=new QTreeWidgetItem(); item->setText(0,""); item->setIcon(0,QIcon(":/image/1.ico")); item->setText(1,"2020-12-11"); item->setText(2,"*.pdf"); item->setText(3,"102MB"); item->setIcon(3,QIcon(":/image/2.ico")); ui->treeWidget->addTopLevelItem(item); }}MainWindow::~MainWindow(){delete ui; }// 当treeWidget中的右键被点击时则触发// By: LyShark// https://www.cnblogs.com/lysharkvoid MainWindow::on_treeWidget_customContextMenuRequested(const QPoint &pos){Q_UNUSED(pos); // 新建Menu菜单QMenu *ptr = new QMenu(this); // 添加Actions创建菜单项ptr->addAction(GetColumnAction); ptr->addAction(GetLineAction); // 添加一个分割线ptr->addSeparator(); ptr->addAction(GetRowDataAction); // 在鼠标光标位置显示右键快捷菜单ptr->exec(QCursor::pos()); // 手工创建的指针必须手工删除delete ptr; }
最终我们实现的效果如下所示。
文章图片
到此这篇关于C/C++ Qt TreeWidget 单层树形组件应用的文章就介绍到这了,更多相关C++ Qt TreeWidget 树形内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- opencv|opencv C++模板匹配的简单实现
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- c++基础概念笔记
- 牛逼!C++开发的穿越丛林真人游戏,游戏未上线就有百万人气
- C++Primer之|C++Primer之 函数探幽
- c/c++|有感 Visual Studio 2015 RTM 简介 - 八年后回归 Dot Net,终于迎来了 Mvc 时代,盼走了 Web 窗体时代...
- QML基础信息
- C++-类型转换
- MongoDB|MongoDB - 简介
- C++面试题目总结