qt自定义树形控件之二(控件的数据库操作)

接上篇:
https://blog.youkuaiyun.com/iamqianrenzhan/article/details/86519468

简介

由于增加了数据库相关的内容,所以需要先对数据库表的设计进行介绍
数据库中共有5个字段,分别是节点uuid,父节点uuid,节点名称,节点内容,节点是否是目录
在这里插入图片描述
该信息对应的树形控件如下:
在这里插入图片描述

具体实现

初始化的时候从数据库中递归读取树结构

void QMyTreeWidget::RecursiveRead(QTreeWidgetItem *temp, QString fatherid)
{
   TemplateTreeLab* tpltl = TemplateTreeLab::get();
   QList<TemplateTree> ltplt = tpltl->getTemplateTreeByFatherUuid(fatherid);
   for(int i = 0;i<ltplt.size();i++)
   {
       TemplateTree temptt = ltplt.at(i);
       QTreeWidgetItem *child=new QTreeWidgetItem(temp);
       QVariant var;
       QString str = temptt.getId();
       var.setValue(str);
       child->setData(0,Qt::UserRole,var);
       child->setText(0,temptt.getTitle());
       RecursiveRead(child,temptt.getId());
   }
}

void QMyTreeWidget::initTreeWidget()
{
   this->clear();

   //this->setHeaderHidden(true);
   QStringList strlist;
   strlist.append("cons");
   strlist.append("title");
   this->setHeaderLabels(strlist);

   //从数据库中读取目录结构
   //RecursiveRead(this,-1);     //this指针可以强制转换
   TemplateTreeLab* tpltl = TemplateTreeLab::get();
   QList<TemplateTree> ltplt = tpltl->getTemplateTreeByFatherUuid("-1");
   for(int i = 0;i<ltplt.size();i++)
   {
       TemplateTree temptt = ltplt.at(i);
       QTreeWidgetItem *temp=new QTreeWidgetItem(this);
       QVariant var;
       QString str = temptt.getId();
       var.setValue(str);
       temp->setData(0,Qt::UserRole,var);
       temp->setText(0,temptt.getTitle());
       RecursiveRead(temp,temptt.getId());
   }

   this->expandAll();
}

增加节点

TemplateTree t(str);
t.setFatherId("-1");
t.setTitle(dia.textValue());
t.setIsCategory("1");
TemplateTreeLab* tpltl = TemplateTreeLab::get();
tpltl->addTemplateTree(t);

删除节点:

TemplateTreeLab* tpltl = TemplateTreeLab::get();
tpltl->deleteAllTemplateTree();
this->expandAll();

添加目录:

TemplateTree t(str);
t.setFatherId(curItem->data(0,Qt::UserRole).toString());
t.setTitle(dia.textValue());
t.setIsCategory("1");
TemplateTreeLab* tpltl = TemplateTreeLab::get();
tpltl->addTemplateTree(t);

添加模板:

TemplateTree t(str);
t.setFatherId(curItem->data(0,Qt::UserRole).toString());
t.setTitle(dia.textValue());
t.setIsCategory("0");
TemplateTreeLab* tpltl = TemplateTreeLab::get();
tpltl->addTemplateTree(t);

删除所有节点:

TemplateTreeLab* tpltl = TemplateTreeLab::get();
tpltl->deleteAllTemplateTree();

重命名节点:

TemplateTree t(curItem->data(0,Qt::UserRole).toString());
t.setTitle(dia.textValue());
TemplateTreeLab* tpltl = TemplateTreeLab::get();
tpltl->updateTemplateTreeTitlebyUuid(t);

在上面的数据库操作过程中用到了两个类,分别是TemplateTree和TemplateTreeLab,关于这两个类的设计方法,可以参考笔者原来写的一篇,qt界面程序数据模型使用MYSQL数据库保存
https://blog.youkuaiyun.com/iamqianrenzhan/article/details/84667926 。 本文涉及到的TemplateTree和TemplateTreeLab类也会上传,具体下载地址可在评论区找到。

2019年12月9号:
本文不知为何突然审核未通过,修改的时候提示包含敏感词,我通篇看了,没什么发现,感觉很奇怪,重新发布一遍。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

元点机智

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值