
在隐藏点。
我们知道在数据结构上来说,任何树都是有根节点的,但我们在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是否是父节点等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)