首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

QTreeWidget的bug?解决方法

2013-06-19 
QTreeWidget的bug?假如现在有个QTreeWidget控件,结构如下:rootchild1child2child3我想要的效果是:点选chil

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函数看看有没有父节点判断

热点排行