Qt 学习笔记 TreeWidget 增删改
在窗体上放一个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 增删改的更多相关文章
- 【.NET-EF】Entity Framework学习笔记2 - 增删改(没查询)
学习描述:用EF就像是省略了做实体类和DAL类,感觉是很方便,废话不多说,直接写步骤: 1.创建EF的edmx文件 这个其实在笔记1已说过,不过有些细节也要说,所以再说一遍,这里使用的是EF 6.1版 ...
- 3、MyBatis.Net学习笔记之增删改
增删改之前先说一下笔记1里提到的一个无法创建ISqlMapper对象的问题. <resultMaps> <resultMap id="FullResultMap" ...
- 【转载】ASP.NET MVC Web API 学习笔记---联系人增删改查
本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系 ...
- EF学习笔记——通用增删改查方案
http://blog.csdn.net/leftfist/article/details/25005307 我刚接触EF未久,还不知道它有什么强大之处,但看上去,EF提供了一般的增删改查功能.以往用 ...
- ASP.NET MVC Web API 学习笔记---联系人增删改查
本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查. 目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的. 下面我们通过创建一个简单的Web API来管理 ...
- Mybatis学习笔记3 - 增删改查示例
1.接口定义 package com.mybatis.dao; import com.mybatis.bean.Employee; public interface EmployeeMapper { ...
- MongoDB学习笔记,基础+增删改查+索引+聚合...
一 基础了解 对应关系 -> https://docs.mongodb.com/manual/reference/sql-comparison/ database -> database ...
- easyui学习笔记1—增删改操作
最近公司要用easyui,这里自己看了官网几篇文章,遇到些问题,大多数的问题都是敲代码的时候笔误,其他有些地方确实需要注意一下,这里做些笔记. 1.在mysql中建好表之后修改id字段为递增字段,发现 ...
- 学习笔记: mysql增删改查基础语句
mysql基础入门语句 增: INSERT INTO 表名(字段1, 2, 3) VALUES('值1', '2', '3') 删: DELETE FROM 表明 WHERE 删除条件 不提供更新条件 ...
随机推荐
- java 某字符串在另一字符串中是否存在
boolean a = 字符串a.contains("字符串b");
- 数据泵如何生成导出文件的DDL脚本
在使用exp/imp时,生成对应dumpfile文件的DDL脚本非常容易,在使用命令imp时,添加参数show, show=y表示展示imp导入的时候,输出相关DDL语句(不包括insert语句),而 ...
- 在eclipse中使用maven创建springMVC项目
一.在eclipse中创建maven-archetype-webapp项目: 1.新建项目选择maven项目 2.默认,下一步 3.选择maven-archetype-webapp,其他保持默认即可 ...
- docker-7 docker在阿里云的使用
在传统模式中,开发团队在开发环境中完成软件开发,自己做了一遍单元测试, 测试通过,ᨀ交到代码版本管理库.运维把应用部署到测 试环境, QA 进行测试,没问题后通知部署人员发布到生产环境. 在上述过程中 ...
- shell脚本实现随机筛选
#!/bin/bash name=(val1 val2 val3 val4 ...) a=$() #以时间产生随机数向39取余得到0~38的值
- Android Paint和Color类绘画实例
要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上.Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法如下: se ...
- svn使用--all-static编译,移植到其它系统上可能使setlocale等GLIBC相关库函数调用失败
svn: Can't convert string from 'UTF-8' to native encoding
- Linux vim(4)
vim相对于vi做了很多的提升: -VIM支持多集撤销 -VIM可以跨平台运行 —VIM支持语法高亮 -VIM支持图形界面 vim三大模式: command mode vi进入时的默认模式 esc进入 ...
- 关于mapreduce.map.java.opts
a) Update the property in relevant mapred-site.xml(from where client load the config). b) Import t ...
- Flex 布局教程:语法篇[转]
网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中 ...