天天看點

qt自定義樹形控件之二(控件的資料庫操作)簡介具體實作

接上篇:

https://blog.csdn.net/iamqianrenzhan/article/details/86519468

簡介

由于增加了資料庫相關的内容,是以需要先對資料庫表的設計進行介紹

資料庫中共有5個字段,分别是節點uuid,父節點uuid,節點名稱,節點内容,節點是否是目錄

qt自定義樹形控件之二(控件的資料庫操作)簡介具體實作

該資訊對應的樹形控件如下:

qt自定義樹形控件之二(控件的資料庫操作)簡介具體實作

具體實作

初始化的時候從資料庫中遞歸讀取樹結構

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号:

本文不知為何突然稽核未通過,修改的時候提示包含敏感詞,我通篇看了,沒什麼發現,感覺很奇怪,重新釋出一遍。