当前位置: 代码迷 >> QT开发 >> QTreeWidget的bug?解决方法
  详细解决方案

QTreeWidget的bug?解决方法

热度:18   发布时间:2016-04-25 03:55:37.0
QTreeWidget的bug?
假如现在有个QTreeWidget控件,结构如下:
root
  child1
  child2
  child3

我想要的效果是:点选child1或child2或child3的时候,相应的项child1、child2、child3被选中,点选root3的时候,如果之前选中的是child3,那么当前选中项还是child3,选中的项不发生变化。

我想的实现是,响应currentItemChanged ( QTreeWidgetItem * current, QTreeWidgetItem * previous )信号

如果current是root,那么setCurrentItem(previous )
可是实现出来的效果是:
点选root3的时候,如果之前选中的是child2,那么root、child1、child2都被选中了
点选root3的时候,如果之前选中的是child3,那么root、child1、child2、child3都被选中了

有没有哪位大神解释为什么会这样?以及怎么才能实现我想要的效果?

------解决方案--------------------
QTreeWidget没有处理子节点选中状态的功能吧
你根据你选中的是root还是child自己处理状态
------解决方案--------------------
selectionMode(QAbstractItemView::SingleSelection)
判断是root还是child处理状态
------解决方案--------------------
引用:
Quote: 引用:

selectionMode(QAbstractItemView::SingleSelection)
判断是root还是child处理状态


我如下做:
QTreeWidget调用setSelectionMode(QAbstractItemView::SingleSelection)
响应currentItemChanged ( QTreeWidgetItem * current, QTreeWidgetItem * previous )信号函数的内部如下处理:
	if (current->text(0) == tr("root"))
{
ui.treeWidget->setCurrentItem(previous );
}


不能达到我需要的效果。

在信号出来函数内部:
if (current->text(0) == tr("root"))
{
                current->setSelected(false);
previous->setSelected(true);
}


还是不能达到我需要的效果。

有没有哪位大神帮帮我呀。

判断是不是root节点用他的parent函数看看有没有父节点判断
  相关解决方案