接上篇:
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号:
本文不知为何突然审核未通过,修改的时候提示包含敏感词,我通篇看了,没什么发现,感觉很奇怪,重新发布一遍。