接上篇:
https://blog.csdn.net/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.csdn.net/iamqianrenzhan/article/details/84667926 。 本文涉及到的TemplateTree和TemplateTreeLab类也会上传,具体下载地址可在评论区找到。

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

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐