在窗体上放一个TreeWidget控件和四个PushButton加一个Horizontal Spacer

布局如图

给树添加元素节点的方法和实现

.h文件

    QTreeWidgetItem * AddTreeRoot(QString name,QString desc);
QTreeWidgetItem * AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc);

.cpp文件

QTreeWidgetItem * TreeViewView::AddTreeRoot(QString name,QString desc)
{
QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc);
ui->tv_Source->addTopLevelItem(item);
return item;
} QTreeWidgetItem * TreeViewView::AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc)
{
QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc);
parent->addChild(item);
return item;
}

在构造方法里添加元素设置树的列数和标题的名称
当然可以设置Header不显示,根据你的需求定

 ui->tv_Source->setColumnCount();
ui->tv_Source->setHeaderLabels(QStringList()<<"Name"<<"Description");
//ui->tv_Source->setHeaderHidden(true);
QTreeWidgetItem * beiJingItem = AddTreeRoot("bejing","city");
AddTreeNode(beiJingItem,"haidian","HaiDian");
AddTreeNode(beiJingItem,"chaoYang","chaoYang");
AddTreeNode(beiJingItem,"fengTai","fengTai");
QTreeWidgetItem * HeiBeiItem =AddTreeRoot("hebei","city");
AddTreeNode(HeiBeiItem,"baoDing","baoDing");
AddTreeNode(HeiBeiItem,"shiJiaZhuang","shiJiaZhuang");

添加事件相对来说比较简单
直接调用我的前边写的方法,因为TreeWidget一直是选中状态就加了一个

添加根节点的槽

void TreeViewView::on_btn_Add_clicked()
{
QTreeWidgetItem * item= ui->tv_Source->currentItem();
if(item!=Q_NULLPTR)
{
AddTreeNode(item,"new","new");
}
else
{
AddTreeRoot("new","new");
}
} void TreeViewView::on_btn_AddRoot_clicked()
{
AddTreeRoot("new","new");
}

修改方法也很简单

void TreeViewView::on_btn_Modify_clicked()
{
QTreeWidgetItem * currentItem = ui->tv_Source->currentItem(); if(currentItem==Q_NULLPTR)
{
return;
}
for(int i=;i<currentItem->columnCount();i++)
{
currentItem->setText(i,tr("Modify")+QString::number(i));
}
}

删除槽就要考虑的多一点
要看它有没有父节点

void TreeViewView::on_btn_Del_clicked()
{
QTreeWidgetItem * currentItem = ui->tv_Source->currentItem(); if(currentItem==Q_NULLPTR)
{
return;
}
//如果没有父节点就直接删除
if(currentItem->parent()==Q_NULLPTR)
{
delete ui->tv_Source->takeTopLevelItem(ui->tv_Source->currentIndex().row());
}
else
{
//如果有父节点就要用父节点的takeChild删除节点
delete currentItem->parent()->takeChild(ui->tv_Source->currentIndex().row());
}
}

看一下效果

完整代码
.h文件

#ifndef TREEVIEWVIEW_H
#define TREEVIEWVIEW_H #include <QDialog>
#include<QString>
#include<QTreeWidgetItem>
namespace Ui {
class TreeViewView;
} class TreeViewView : public QDialog
{
Q_OBJECT public:
explicit TreeViewView(QWidget *parent = );
~TreeViewView(); private slots:
void on_tv_Source_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous); void on_btn_Add_clicked(); void on_btn_AddRoot_clicked(); void on_btn_Del_clicked(); void on_btn_Modify_clicked(); private:
Ui::TreeViewView *ui;
QTreeWidgetItem * AddTreeRoot(QString name,QString desc);
QTreeWidgetItem * AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc);
}; #endif // TREEVIEWVIEW_H

.cpp文件

#include "treeviewview.h"
#include "ui_treeviewview.h"
#include <QStringList>
TreeViewView::TreeViewView(QWidget *parent) :
QDialog(parent),
ui(new Ui::TreeViewView)
{
ui->setupUi(this); ui->tv_Source->setColumnCount();
ui->tv_Source->setHeaderLabels(QStringList()<<"Name"<<"Description");
//ui->tv_Source->setHeaderHidden(true);
QTreeWidgetItem * beiJingItem = AddTreeRoot("bejing","city");
AddTreeNode(beiJingItem,"haidian","HaiDian");
AddTreeNode(beiJingItem,"chaoYang","chaoYang");
AddTreeNode(beiJingItem,"fengTai","fengTai");
QTreeWidgetItem * HeiBeiItem =AddTreeRoot("hebei","city");
AddTreeNode(HeiBeiItem,"baoDing","baoDing");
AddTreeNode(HeiBeiItem,"shiJiaZhuang","shiJiaZhuang");
} TreeViewView::~TreeViewView()
{
delete ui;
} QTreeWidgetItem * TreeViewView::AddTreeRoot(QString name,QString desc)
{
QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc);
ui->tv_Source->addTopLevelItem(item);
return item;
} QTreeWidgetItem * TreeViewView::AddTreeNode(QTreeWidgetItem *parent,QString name,QString desc)
{
QTreeWidgetItem * item=new QTreeWidgetItem(QStringList()<<name<<desc);
parent->addChild(item);
return item;
} void TreeViewView::on_tv_Source_currentItemChanged(QTreeWidgetItem *current, QTreeWidgetItem *previous)
{
if(current==Q_NULLPTR)return;
if(previous!=Q_NULLPTR)
{
previous->setBackground(,Qt::transparent);
previous->setBackground(,Qt::transparent);
previous->setTextColor(,Qt::black);
previous->setTextColor(,Qt::black);
}
current->setTextColor(,Qt::blue);
current->setTextColor(,Qt::blue);
current->setBackground(,Qt::red);
current->setBackground(,Qt::red);
} void TreeViewView::on_btn_Add_clicked()
{
QTreeWidgetItem * item= ui->tv_Source->currentItem();
if(item!=Q_NULLPTR)
{
AddTreeNode(item,"new","new");
}
else
{
AddTreeRoot("new","new");
}
} void TreeViewView::on_btn_AddRoot_clicked()
{
AddTreeRoot("new","new");
} void TreeViewView::on_btn_Del_clicked()
{
QTreeWidgetItem * currentItem = ui->tv_Source->currentItem(); if(currentItem==Q_NULLPTR)
{
return;
}
//如果没有父节点就直接删除
if(currentItem->parent()==Q_NULLPTR)
{
delete ui->tv_Source->takeTopLevelItem(ui->tv_Source->currentIndex().row());
}
else
{
//如果有父节点就要用父节点的takeChild删除节点
delete currentItem->parent()->takeChild(ui->tv_Source->currentIndex().row());
}
} void TreeViewView::on_btn_Modify_clicked()
{
QTreeWidgetItem * currentItem = ui->tv_Source->currentItem(); if(currentItem==Q_NULLPTR)
{
return;
}
for(int i=;i<currentItem->columnCount();i++)
{
currentItem->setText(i,tr("Modify")+QString::number(i));
}
}

Qt 学习笔记 TreeWidget 增删改的更多相关文章

  1. 【.NET-EF】Entity Framework学习笔记2 - 增删改(没查询)

    学习描述:用EF就像是省略了做实体类和DAL类,感觉是很方便,废话不多说,直接写步骤: 1.创建EF的edmx文件 这个其实在笔记1已说过,不过有些细节也要说,所以再说一遍,这里使用的是EF 6.1版 ...

  2. 3、MyBatis.Net学习笔记之增删改

    增删改之前先说一下笔记1里提到的一个无法创建ISqlMapper对象的问题. <resultMaps> <resultMap id="FullResultMap" ...

  3. 【转载】ASP.NET MVC Web API 学习笔记---联系人增删改查

    本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系 ...

  4. EF学习笔记——通用增删改查方案

    http://blog.csdn.net/leftfist/article/details/25005307 我刚接触EF未久,还不知道它有什么强大之处,但看上去,EF提供了一般的增删改查功能.以往用 ...

  5. ASP.NET MVC Web API 学习笔记---联系人增删改查

    本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查. 目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的. 下面我们通过创建一个简单的Web API来管理 ...

  6. Mybatis学习笔记3 - 增删改查示例

    1.接口定义 package com.mybatis.dao; import com.mybatis.bean.Employee; public interface EmployeeMapper { ...

  7. MongoDB学习笔记,基础+增删改查+索引+聚合...

    一 基础了解 对应关系 -> https://docs.mongodb.com/manual/reference/sql-comparison/ database -> database ...

  8. easyui学习笔记1—增删改操作

    最近公司要用easyui,这里自己看了官网几篇文章,遇到些问题,大多数的问题都是敲代码的时候笔误,其他有些地方确实需要注意一下,这里做些笔记. 1.在mysql中建好表之后修改id字段为递增字段,发现 ...

  9. 学习笔记: mysql增删改查基础语句

    mysql基础入门语句 增: INSERT INTO 表名(字段1, 2, 3) VALUES('值1', '2', '3') 删: DELETE FROM 表明 WHERE 删除条件 不提供更新条件 ...

随机推荐

  1. [20140928]创建连接到MySQL的连接服务器

    首先要安装 mysql odbc 然后 odbc下创建DSN,并且要在系统DSN下. 最后执行 exec sp_addlinkedserver  @server= 'XY',        --这是链 ...

  2. javascript-建造者模式

    建造者模式笔记 1.工厂模式主要是为了创建对象实例或者类簇(抽象工厂),关心的是最终产出(创建)的是什么,不关心你创建的整个过程,仅仅需要知道你最终创建的结果 2.建造者模式目的也是为了创建对象,但是 ...

  3. web会话管理

    http协议是无状态的协议,也就是说服务器不知道这个http连接是那个浏览器发过来的. 要标识会话的唯一,有两种方法:1 Cookie  2 会话级cookie(开关浏览器算一次会话) 和 持久化的c ...

  4. java word文档 转 html文件

    一.简介 一般word文件后缀有doc.docx两种.docx是office word 2007以及以后版本文档的扩展名:doc是office word 2003文档保存的扩展名.对于这两种格式的wo ...

  5. pl/sql developer——instant-client 简单配置

    instant-client(数据库即时客户端) 官方说明:即时客户端在一个单独的针对 Instant Client 的 OTN 开发和分发许可下提供,它允许大多数许可下载.重新分发和部署到生产环境中 ...

  6. 【转】总结:2015这一年App Store审核指南都有哪些变化

    本文针对此前版本的<App Store审核指南>进行了更新,并标注了2015年苹果对<App Store审核指南>进行的一些调整. App Store Review Guide ...

  7. 烂泥:vcenter通过模板部署vm

    本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb. 前一篇文章我们介绍了有关vcenter5.5的安装与配置,这篇文章我们再来介绍下,如何 ...

  8. CentOS 7.2安装Zabbix 3.2全攻略

    放在最前面:鉴于网上爬虫猖獗,博客被盗时有发生,这里需要来个链接,大家请认准来自博客园的Scoter:http://www.cnblogs.com/scoter2008 1.安装环境:VMware虚拟 ...

  9. 制作OS X 10.9 Mavericks 安装U盘

    转载:http://www.macx.cn/forum.php?mod=viewthread&tid=2094799 安装win7的话,在mac中使用bootcamp制作一个win7安装盘即可 ...

  10. 网络基本概念备忘:MAC地址,端口,HTTP状态码

    MAC地址 英文MAC Address 英文全称: Media Access Control Address 别称:硬件位址 用途:定义网络设备位置 表示:十六进制数,6 Byte 特点:产品出产后M ...