概述:
1.之前分享过关于QTreeWidget节点操作:链接: QTreeWidget节点操作.
2.这篇文章分享下使用的基本操作(添加节点、删除指定节点、删除所有节点)
.h:
typedef struct
{
int nType;
std::string strID;
std::string strEquipType;
std::string strEquioName;
}leftNavigation;
public:
/*
* @brief:删除指定id
*/
void deleteTreeItem(leftNavigation _treeData);
/*
* @brief:删除所有
*/
void deleteAllTreeItem();
private:
/*
* @brief:增加新建
*/
void addEquipmentItem(leftNavigation _treeData);
/*
* @brief:
*/
void removeItem(QTreeWidgetItem *item);
private:
QTreeWidget *m_tree;
QTreeWidget *m_tree2;
QTreeWidget *m_tree3;
.cpp:
if (m_tree == nullptr)
return;
if (m_tree2 == nullptr)
return;
if (m_tree3 == nullptr)
return;
int rootNum = m_tree->topLevelItemCount(); //返回根节点数量
int rootCloum = m_tree->columnCount(); //返回根节点列数
for (int i = 0; i < rootNum; i++)
{//设备
QTreeWidgetItem *item = m_tree->topLevelItem(i);
QString ss = item->text(rootCloum);
if (ss.compare(QString::fromStdString(_treeData.strEquipType)) == 0)
{
QTreeWidgetItem *cItem;
for (int j = 0; j < item->childCount(); j++)
{
cItem = item->child(j);
if (cItem->text(0).compare(QString::fromStdString(_treeData.strID)) == 0)
{
delete cItem;
if (item->childCount() == 0)
item->setHidden(true);
return;
}
}
}
}
rootNum = m_tree2->topLevelItemCount(); //返回根节点数量
rootCloum = m_tree2->columnCount(); //返回根节点列数
for (int i = 0; i < rootNum; i++)
{//结构
QTreeWidgetItem *item = m_tree2->topLevelItem(i);
if (item->text(rootCloum).compare(QString::fromStdString(_treeData.strEquipType)) == 0)
{
QTreeWidgetItem *cItem;
for (int j = 0; j < item->childCount(); j++)
{
cItem = item->child(j);
if (cItem->text(0).compare(QString::fromStdString(_treeData.strID)) == 0)
{
delete cItem;
if (item->childCount() == 0)
item->setHidden(true);
return;
}
}
}
}
}
void LeftDock::deleteAllTreeItem()
{
if (m_tree == nullptr)
return;
if (m_tree2 == nullptr)
return;
if (m_tree3 == nullptr)
return;
QTreeWidgetItem *item = m_tree->topLevelItem(0);
while (item)
{
removeItem(item);
item = m_tree->topLevelItem(0);
}
item = m_tree2->topLevelItem(0);
while (item)
{
removeItem(item);
item = m_tree2->topLevelItem(0);
}
item = m_tree3->topLevelItem(0);
while (item)
{
removeItem(item);
item = m_tree3->topLevelItem(0);
}
}
void LeftDock::addEquipmentItem(leftNavigation _treeData)
{//设备
if (m_tree == nullptr)
return;
int rootNum = m_tree->topLevelItemCount(); //返回根节点数量
int rootCloum = m_tree->columnCount(); //返回根节点列数
if (rootNum == 0)
{
set_tree();
//addEquipmentItem(_treeData);
}
else
{
for (int i = 0; i < rootNum; i++)
{
//获取设备种类
QTreeWidgetItem *pItemType = m_tree->topLevelItem(i);
//设备英文名称
QString str = pItemType->text(rootCloum);
//找到统一设备种类
if (str.compare(QString::fromStdString(_treeData.strEquipType)) == 0)
{
//获取单一种类下设备id(item)数量
int pItemChilds = pItemType->childCount();
if (pItemChilds == 0)
{
//添加item
QTreeWidgetItem *item = new QTreeWidgetItem;
item->setText(0, QString::fromStdString(_treeData.strID));
pItemType->addChild(item);
pItemType->setHidden(false);
return;
}
for (int j = 0; j < pItemChilds; j++)
{
QTreeWidgetItem *pItem = pItemType->child(j);
QString id = pItem->text(0);
if (id.compare(QString::fromStdString(_treeData.strID)) == 0)
{//id重复直接返回
return;
}
else
{
//添加item
QTreeWidgetItem *item = new QTreeWidgetItem;
item->setText(0, QString::fromStdString(_treeData.strID));
pItemType->addChild(item);
return;
}
}
}
}
}
}
void LeftDock::removeItem(QTreeWidgetItem *item)
{
int count = item->childCount();
if (count == 0)//没有子节点,直接删除
{
delete item;
return;
}
for (int i = 0; i < count; i++)
{
QTreeWidgetItem *childItem = item->child(0);//删除子节点
removeItem(childItem);
}
delete item;//最后将自己删除
}
over:
欢迎大家关注作者在文末评论、点赞、转发以及批评指正!
如果大家有更好的方法或有问题可以在文末评论一起讨论!
共同学习!
共同进步!
文末一句话:
最近身边有几个前同事 在换工作,然后一直都在做C++、Qt开发,没有特定在某个领域钻研下去(音视频、三维等),再加上5、6+的开发经验导致工资上不去,公司选择少等一系列问题吧!不知道大家现在几年开发经验,这个也是值得思考规划的问题。