treewidget的根节点初始位置

treewidget的根节点初始位置,第1张

在隐藏点。

我们知道在数据结构上来说,任何树都是有根节点的,但我们在QTreeWidget对象中并没有看到界面上展示一个根节点,在QTreeWidget对象和数据项构建时也没有指定这样的根节点,但实际上这个根节点还是存在的,只是不可见,且该节点是树型部件创建之后就自动创建,无论是否存在顶层项。

主要是可以用于递归访问树的所有节点,递归不是从topLevelItem开始,而是从根节点开始,所有节点的类型都是QTreeWidgetItem,可以用QTreeWidgetItem的child方法逐层递归访问。

增与删

下面是添加的功能:

//这是添加根节点的功能实现this->connect(ui->Root_btn, SIGNAL(clicked(bool)), this, SLOT(addRoot()));void Widget::addRoot()

{

QString one = ui->first->text();

QString two = ui->second->text();

QString three = ui->third->text();

QTreeWidgetItem item = new QTreeWidgetItem();

item->setText(0, one);

item->setText(1, two);

item->setText(2, three);

ui->Tree->addTopLevelItem(item);

}//这是添加叶子节点的实现this->connect(ui->Child_btn, SIGNAL(clicked(bool)), this, SLOT(addChild()));void Widget::addChild()

{

QString one = ui->first->text();

QString two = ui->second->text();

QString three = ui->third->text();

QTreeWidgetItem parent = ui->Tree->currentItem();

QTreeWidgetItem item = new QTreeWidgetItem();

item->setText(0, one);

item->setText(1, two);

item->setText(2, three); parent->addChild(item);

}

添加叶子节点字需要注意父节点的获取就可以了。

下面是删除节点的功能:

this->connect(ui->DEL_btn, SIGNAL(clicked(bool)), this, SLOT(deleteNode()));

void del(QTreeWidgetItem node){ if(node->childCount() > 0)

{ for(int i = 0; i < node->childCount(); i ++)

{ del(node->child(i));

}

}

else

{

delete node;

}

}

void Widget::deleteNode()

{

QTreeWidgetItem item = ui->Tree->currentItem();

if(item->childCount() > 0)

{ for(int i = 0; i < item->childCount(); i ++)

{ del(item->child(i));

}

}

delete item;

}

删除节点时记得循环删除这个节点下面的所有的子节点。

滤过父节点不可能,但是双击目标,还可以产生响应的事件。这是我写过的代码:单击事件(可以改双击,内容一样)

首先再 建树时注意加上一句:

HTREEITEM root = m_treeInsertItem(_T("图层集合"),TVI_ROOT);

m_treeSetItemData(root, 0);//就是加上的语句,0(可变)就是后面的nDat

void TreeDolg::OnNMClickTree1(NMHDR pNMHDR, LRESULT pResult)

{

// TODO: 在此添加控件通知处理程序代码

CPoint pt = GetCurrentMessage()->pt;//获取当前鼠标点击消息的坐标点

m_treeScreenToClient(&pt);//将鼠标的屏幕坐标,转换成树形控件的客户区坐标

UINT uFlags = 0;

HTREEITEM hItem = m_treeHitTest(pt, &uFlags);//然后做点击测试

if ((hItem != NULL) && (TVHT_ONITEM & uFlags))//如果点击的位置是在节点位置上面

{

m_treeSelectItem(hItem);

//获取开始我们设置的数据,注意这就是我为什么开始要每个节点设置不同的数据的原因。

//当然,如果你的数据节点比较少,你也可以通过获取节点的文字,如上面设置的"海淀区"

//,然后通过字符串比较来判断点击了哪个节点

int nDat = m_treeGetItemData(hItem); //然后根据不同的节点,你完成不同的动作即可

switch(nDat)

{

case 0:

break;

default:

}

}

pResult = 0;

}

以上就是关于treewidget的根节点初始位置全部的内容,包括:treewidget的根节点初始位置、Qt中怎么实现Qtreewidget节点的撤销重做、怎么判断qtreewidgetitem是否是父节点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9567767.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存