读书人

QTreeWidget的bug?解决方法

发布时间: 2013-06-19 10:26:41 作者: rapoo

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

读书人网 >QT开发

热点推荐