返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C/C++ Qt TreeWidget 单层树形组件应用小结
  • 801
分享到

C/C++ Qt TreeWidget 单层树形组件应用小结

2024-04-02 19:04:59 801人浏览 八月长安
摘要

TreeWidget 目录树组件,该组件适用于创建和管理目录树结构,在开发中我们经常会把它当作一个升级版的ListView组件使用,因为ListView每次只能显示一列数据集,而使用

TreeWidget 目录树组件,该组件适用于创建和管理目录树结构,在开发中我们经常会把它当作一个升级版的ListView组件使用,因为ListView每次只能显示一列数据集,而使用TableWidget组件显示多列显得不够美观,此时使用Tree组件显示单层结构是最理想的方式,本章博文将通过TreeWidget实现多字段显示,并增加一个自定义菜单,通过在指定记录上右键可弹出该菜单并对指定记录进行操作。

1.通过TreeView组件实现一个只读属性的树形目录,该目录中指定三个字段,分别用来表示ID,IP地址,用户名字段.

初始化Tree组件

  • 1.初始化并设置treeView属性
  • 2.设置列头长度
  • 3.设置列头数据
  • 4.设置表中元素

#include <QSplitter>
#include <QtreeView>
#include <QTextCodec>
#include <QStandardItemModel>

// By: LyShark
// https://www.cnblogs.com/lyshark
MainWindow::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);                                   // 设置表头缩进为1
    ui->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<QStandardItem *> 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,"<lyshark.com>");
        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/lyshark
void 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 树形内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C/C++ Qt TreeWidget 单层树形组件应用小结

本文链接: https://lsjlt.com/news/158578.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C/C++ Qt TreeWidget 单层树形组件应用小结
    TreeWidget 目录树组件,该组件适用于创建和管理目录树结构,在开发中我们经常会把它当作一个升级版的ListView组件使用,因为ListView每次只能显示一列数据集,而使用...
    99+
    2024-04-02
  • C/C++ Qt TreeWidget单层树形组件怎么应用
    本篇内容主要讲解“C/C++ Qt TreeWidget单层树形组件怎么应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C/C++ Qt TreeWid...
    99+
    2023-06-21
  • C/C++表格组件Qt TableWidget应用详解
    TableWidget 表格结构组件,该组件可以看作是TreeWidget树形组件的高级版,表格组件相比于树结构组件灵活性更高,不仅提供了输出展示二维表格功能,还可以直接对表格元素直...
    99+
    2024-04-02
  • 详解C/C++ QT QChart 绘制组件应用
    QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于GraphicsView模式实现,其核心是QChartView和QChart...
    99+
    2024-04-02
  • C/C++ Qt Dialog 对话框组件应用技巧
    在Qt中对话框分为两种形式,一种是标准对话框,另一种则是自定义对话框,在一般开发过程中标准对话框使用是最多的了,标准对话框一般包括 QMessageBox,QInputDialog,...
    99+
    2024-04-02
  • C/C++ Qt MdiArea 多窗体组件应用教程
    MDI多窗体组件,主要用于设计多文档界面应用程序,该组件具备有多种窗体展示风格,其实现了在父窗体中内嵌多种子窗体的功能,使用MDI组件需要在UI界面中增加mdiArea控件容器,我们...
    99+
    2024-04-02
  • C/C++ Qt数据库与SqlTableModel组件应用教程
    SqlTableModel 组件可以将数据库中的特定字段动态显示在TableView表格组件中,通常设置QSqlTableModel类的变量作为数据模型后就可以显示数据表内容,界面组...
    99+
    2024-04-02
  • 如何分析C/C++ Qt数据库与SqlTableModel组件应用
    今天就跟大家聊聊有关如何分析C/C++ Qt数据库与SqlTableModel组件应用,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。SqlTableModel 组件可以将数...
    99+
    2023-06-22
  • C/C++ Qt ToolBar菜单组件的具体使用是怎样的
    C/C++ Qt ToolBar菜单组件的具体使用是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。ToolBar工具栏在所有窗体应用程...
    99+
    2023-06-21
  • C/C++ Qt 数据库QSql增删改查组件应用教程
    Qt SQL模块是Qt中用来操作数据库的类,该类封装了各种SQL数据库接口,可以很方便的链接并使用,数据的获取也使用了典型的Model/View结构,通过MV结构映射我们可以实现数据...
    99+
    2024-04-02
  • C/C++Qt自定义Dialog对话框组件应用案例详解
    在上一篇文章 《C/C++ Qt 标准Dialog对话框组件应用》 中我给大家演示了如何使用Qt中内置的标准对话框组件实现基本的数据输入功能。 但有时候我们需要一次性修改多个数据,使...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作