因为下个星期要中要做一个关于QTreeWidget相关的东西,特先学习相关点东西,明天就直接开始做了。

涉及如下技术:

1、在QTreeWidget中添加头(列头)。

2、往QTreeWidget中添加数据。

3、右键响应菜单栏。

4、关联信号与槽。

文件目录如下:

运行截图如下:

首先提供伪代码,再提供完整代码,最后提供整个项目的下载:

1、在QTreeWidget中添加头(列头)。

    QStringList headers;headers.append("Filename");headers.append("Last Modified");headers.append("Type");headers.append("Size");ui->treeWidget->setHeaderLabels(headers);

2、往QTreeWidget中添加数据。

QTreeWidgetItem* Widget::AddItem(const QString &filename, const QString &last_modified, const QString &type, int size, QIcon icon, QTreeWidgetItem *parent){QTreeWidgetItem* item=new QTreeWidgetItem();item->setText(0,filename);item->setIcon(0,icon);item->setText(1,last_modified);item->setText(2,type);item->setText(3,QString::number(size));if(parent)parent->addChild(item);elseui->treeWidget->addTopLevelItem(item);return item;
}

调用如下:

    this->AddItem("Qt5开发实例.txt","2016-01-15","text file",8512,icon_file);this->AddItem("MFC开发实例.txt","2010-04-27","text file",4526,icon_file);this->AddItem("Java开发实例.txt","2011-12-7","text file",1526,icon_file);this->AddItem("C#开发实例.txt","2009-08-5","text file",7895,icon_file);QTreeWidgetItem* item=AddItem("video","2018-03-25","folder",0,icon_folder);AddItem("Qt管理系统开发视频.mp4","2018-03-25","mp4 file",4512,icon_file,item);

3、右键响应菜单栏。

int Widget::OnWidgetContextMeun(const QPoint &pt){//当前选中项QTreeWidgetItem *selected=ui->treeWidget->itemAt(pt);//qDebug()<<row;QMenu menu;menu.addAction(ui->actionAdd);if(selected){menu.addAction(ui->actionRemove);}//显示菜单menu.exec(ui->treeWidget->mapToGlobal(pt));return 0;
}int Widget::OnMenuAdd(){QString msg=ui->treeWidget->currentItem()->text(0); //获取当前行的数据//qDebug()<<msg;QMessageBox::information(this,tr("提示"),"当前选中的信息为:"+msg,QMessageBox::Ok);return 0;
}int Widget::OnMenuRemove(){QString msg=ui->treeWidget->currentItem()->text(0); //获取当前行的数据//qDebug()<<msg;QMessageBox::information(this,tr("提示"),"当前选中的信息为:"+msg,QMessageBox::Ok);return 0;
}

4、关联信号与槽。

    ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);connect(ui->treeWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(OnWidgetContextMeun(QPoint)));connect(ui->actionAdd,SIGNAL(triggered(bool)),this,SLOT(OnMenuAdd()));connect(ui->actionRemove,SIGNAL(triggered(bool)),this,SLOT(OnMenuRemove()));

要注意如下几点:

右键时弹出快捷菜单(又称:上下文菜单)
步骤:
(1)设置菜单策略setContextMenuPolicy(Qt::CustomContextMenu);
(2) 关联信号customContextMenuRequested()在QWidget基类中有这个signal
(3) 事件处理(slot): 构造菜单、显示

(4) 菜单响应(action)

其次要注意:

QPoint pt_global = ui.listWidget->mapToGlobal(pt) ;
menu.exec(pt_global);

要把这个QPoint转换到全局坐标(屏幕坐标)

下面是整个源码:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QMessageBox>
#include <QIcon>
#include <QMenu>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();QTreeWidgetItem* AddItem(const QString &filename,const QString &last_modified,const QString &type,int size,QIcon icon,QTreeWidgetItem *parent=NULL);private slots:int OnWidgetContextMeun(const QPoint& pt);  //右键弹出菜单int OnMenuAdd();int OnMenuRemove();private:Ui::Widget *ui;
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"#include <QDebug>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);ui->treeWidget->setColumnCount(4);//设置宽度ui->treeWidget->setColumnWidth(0,150);QStringList headers;headers.append("Filename");headers.append("Last Modified");headers.append("Type");headers.append("Size");ui->treeWidget->setHeaderLabels(headers);QIcon icon_folder(":/folder.png");QIcon icon_file(":/file.png");this->AddItem("Qt5开发实例.txt","2016-01-15","text file",8512,icon_file);this->AddItem("MFC开发实例.txt","2010-04-27","text file",4526,icon_file);this->AddItem("Java开发实例.txt","2011-12-7","text file",1526,icon_file);this->AddItem("C#开发实例.txt","2009-08-5","text file",7895,icon_file);QTreeWidgetItem* item=AddItem("video","2018-03-25","folder",0,icon_folder);AddItem("Qt管理系统开发视频.mp4","2018-03-25","mp4 file",4512,icon_file,item);//右键弹出菜单-右键菜单支持ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);connect(ui->treeWidget,SIGNAL(customContextMenuRequested(QPoint)),this,SLOT(OnWidgetContextMeun(QPoint)));connect(ui->actionAdd,SIGNAL(triggered(bool)),this,SLOT(OnMenuAdd()));connect(ui->actionRemove,SIGNAL(triggered(bool)),this,SLOT(OnMenuRemove()));}int Widget::OnWidgetContextMeun(const QPoint &pt){//当前选中项QTreeWidgetItem *selected=ui->treeWidget->itemAt(pt);//qDebug()<<row;QMenu menu;menu.addAction(ui->actionAdd);if(selected){menu.addAction(ui->actionRemove);}//显示菜单menu.exec(ui->treeWidget->mapToGlobal(pt));return 0;
}int Widget::OnMenuAdd(){QString msg=ui->treeWidget->currentItem()->text(0); //获取当前行的数据//qDebug()<<msg;QMessageBox::information(this,tr("提示"),"当前选中的信息为:"+msg,QMessageBox::Ok);return 0;
}int Widget::OnMenuRemove(){QString msg=ui->treeWidget->currentItem()->text(0); //获取当前行的数据//qDebug()<<msg;QMessageBox::information(this,tr("提示"),"当前选中的信息为:"+msg,QMessageBox::Ok);return 0;
}QTreeWidgetItem* Widget::AddItem(const QString &filename, const QString &last_modified, const QString &type, int size, QIcon icon, QTreeWidgetItem *parent){QTreeWidgetItem* item=new QTreeWidgetItem();item->setText(0,filename);item->setIcon(0,icon);item->setText(1,last_modified);item->setText(2,type);item->setText(3,QString::number(size));if(parent)parent->addChild(item);elseui->treeWidget->addTopLevelItem(item);return item;
}Widget::~Widget()
{delete ui;
}

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

完整项目代码下载地址:

https://download.csdn.net/download/qq78442761/10307122

C++|Qt中QTreeWidget基本操作及完整代码下载相关推荐

  1. 链表基本操作(完整代码)

    链表基本操作(完整代码) 首先汇总一下单链表的基本操作(带头结点): 1.单链表的创建 (1)头插法创建链表 (2)尾插法创建链表 2.单链表的打印 3.单链表的查询 4.结点插入 (1)头部插入 ( ...

  2. C++实现DPM/LatentSVM 完整代码下载 --- 第三篇

    这是我的DPM代码的第三篇博文,最初发表在http://blog.csdn.net/j56754gefge/article/details/40708679,均是我原创文章,他人转载请注明出处! C+ ...

  3. 【Android 逆向】使用 Python 解析 ELF 文件 ( Capstone 反汇编 ELF 文件中的机器码数据 | 完整代码示例 ) ★★★

    文章目录 一.完整代码示例 二.执行结果 三.博客资源 一.完整代码示例 使用 Python 解析 ELF 文件完整代码示例 : # coding=utf-8 # 解析 elf 文件需要导入的依赖库 ...

  4. Qt中对main.cpp的代码解释

    #include "mywidget.h" #include <QApplication> // 包含一个应用程序类的头文件// main程序入口,argc命令行变量的 ...

  5. OpenCV演示代码以查找图像中的轮廓(附完整代码)

    OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 OpenCV演示代码以查找图像中的轮廓 #include "opencv2/imgcodecs.hpp&quo ...

  6. Winform中实现中文验证码(附代码下载)

    场景 中文验证码效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新 ...

  7. 2020年数学建模国赛C题完整代码下载链接处

    2020年数学建模国赛C题完整代码 因为私信找小编要论文的友友们实在太多了,所以这里直接开源2020年高教社杯数学建模C题的完整代码如下: 需要的小伙伴们,可以利用百度网盘来提取相关资料 ~~ ~~ ...

  8. qt中QTreeWidget控件的使用

    引言 在按照项目设计的样式来实现的时候,发现了一些问题,幸运的是最终找到了解决的方法. 详情 1.QTreeWidget设置列数和隐藏头(这里指的是有1所在的那个部位) ui->treeWidg ...

  9. 二叉平衡树的基本操作(完整代码)

    首先二叉平衡树的基本原理你要懂,这里只提供全部代码和相应的说明. #include<stdio.h> #include<stdlib.h>#define LH +1 //左树比 ...

最新文章

  1. 整理收集49条JQuery代码小结
  2. 事务隔离机制原理分析以及是否可以防止订单超卖
  3. 双11大考 POLARDB分钟级弹性让企业轻松扩展
  4. Android零基础入门第25节:最简单最常用的LinearLayout线性布局
  5. smartform四联纸跳页问题
  6. php博客添加live2d,在博客中增加自己的live2d纸片人模型方法
  7. Windows10+PicGo+七牛云+Typora搭建写作环境与图床
  8. iOS Hacker Keychain相关The executable was signed with invalid entitlements
  9. ol xyz 加载天地图_OpenLayers加载天地图方法——WMTS和XYZ
  10. 硬件开源产品_5种适合户外活动的开源硬件产品
  11. web 富文本编辑器总结
  12. CCF201412-5 货物调度【费用流】(100分解题链接)
  13. ctrl z撤销后如何恢复_偏瘫后如何恢复?偏瘫家庭功能锻炼方法送给你
  14. ubuntu Mendeley Desktop 安装
  15. 抖音推荐的背后原理——大数据+推荐
  16. 耐得住寂寞,拥得了繁华
  17. 人艰不拆~找实习之路(二)。
  18. 数学算法 湿度计算方法
  19. Android开放root权限
  20. 关于爬取豆瓣电影和豆瓣书本的图片

热门文章

  1. Liferay SSO CAS 集成
  2. C++ 大神John Carmack的编程传说!还在抱怨C++难学吗?看大佬操作!
  3. 要怎么样做一个合格点的程序猿呢?
  4. 写给自己看的HTML、CSS、XHTML指南 八
  5. 恶意软件清理助手2008(测试版) 20080707
  6. 01数据库、DBMS和SQL
  7. 学C语言好,还是学C++好呢?这两个专业在哪些领域用得最多?
  8. 向上取整函数_向上取整函数ROUNDUP在BOM表里面的实际应用
  9. STM32----ADC多通道采集
  10. 一款简单易用的mp3录音软件