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(2);
    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=0;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 = 0);
    ~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(2);
    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(0,Qt::transparent);
        previous->setBackground(1,Qt::transparent);
        previous->setTextColor(0,Qt::black);
        previous->setTextColor(1,Qt::black);
    }
    current->setTextColor(0,Qt::blue);
    current->setTextColor(1,Qt::blue);
    current->setBackground(0,Qt::red);
    current->setBackground(1,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=0;i<currentItem->columnCount();i++)
    {
        currentItem->setText(i,tr("Modify")+QString::number(i));
    }
}

 

 

 

 

 

时间: 2024-08-01 03:02:40

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

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

本章节简单介绍一下使用ASP.NET MVC Web API 做增删改查.目前很多Http服务还是通过REST或者类似RESP的模型来进行数据操作的.下面我们通过创建一个简单的Web API来管理联系人          说明:为了方便数据不使用真正的数据库,而是通过内存数据模拟    1.       Web API中包含的方法 Action HTTP method Relative URI GetAllContact GET /api/contact GetContact GET /api/

hibernate3学习笔记(四) 增删改查

测试代码: package com.hb3.pack_01; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import com.hb3.pack_01.model.User; public class BusinessService { public stati

Qt学习笔记 ListWidget的增删改

学习了一下ListWidget控件的使用,做一个小功能增删改 先把代码分解最后给出完整代码 在窗体上添加一个ListWidget 一个Horizontal Specer和  三个PushButton 效果如下 因为构造函数中的SetupUi(this)会自动将符合on_objectName_signalName()命名 的任意槽与相应的objectName的signalName()信号连接到一起 我就直接在.h文件里添加槽的声明  private slots: void on_btn_AddEv

Qt学习笔记 TableWidget使用说明和增删改操作的实现

看一下效果很简单的一个小功能 先说分部讲一下过程 再给出详细代码  添加数据 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->tableWidget->setColumnCount(2); ui->tableWidget->setRowCount(2); ui->tableWidget->se

【Qt编程】Qt学习笔记&amp;lt;三&amp;gt;

1.      如果程序中使用了png以外格式的图片,在发布程序时就要将Qt安装目录下plugins中的imagineformats文件复制到发布文件中. 2.      在函数声明处快速添加函数定义可单击函数名,按下alt+Enter键后,按下Enter键就可以进入到函数定义部分. 3.      关联槽和信号的两种方法:1.直接在设计器中用鼠标拖拽,适合于设计器中的部件间进行.2.在设计器中右击部件进入转到槽,这种方法是自动关联. 4.      我们在进行编程时,应注意:一个文件.一个类.

java学习:数据增删改查、存储过程调用及事务处理

为了方便,先定义二个常量: package jmyang.utils; public class ConstDefine { /** * WebLogic服务器地址 */ public static final String WebLogicServerUrl = "t3://localhost:7001"; /** * WebLogic JNDI上下文字符串 */ public static final String WebLogicINDIContextFactory = &quo

Qt学习笔记 线程(一)

Qt中的线程是与平台无关的 QThread 提供了创建一个新线程的方法 新建一个线程,继承QThread并重写它的run()当调用 start()函数时会调用重载的run()函数 例: #ifndef MYTHREAD_H #define MYTHREAD_H #include <QThread> class MyThread : public QThread { Q_OBJECT public: bool stop ; explicit MyThread(QObject *parent =

Qt学习笔记网络(一)

Qt5 移除了QHttp是因为功能重复 用QNetworkAccessManager完全能搞定 新建一个控制台应用程序 看一下QNetworkAccessManager的帮助文档 需要添加Qt + =network 新建一个类 .h文件 #ifndef DOWNPAGES_H #define DOWNPAGES_H #include<QNetworkAccessManager> #include <QObject> class DownPages : public QObject

Qt学习笔记常用容器

主要说Qt的以下几种容器 1.QList<T> 2.QLinkedList<T> 3.Map<T> 和一些常用的容器方法的使用 qSort qCopy qFind 1.QList<T>泛型集合是最常用的一种容器 看一下它的常用 操作 添加删除和两个迭代器 QListIterator和QMutableListIterator #include <QCoreApplication> #include<QList> #include<