• 9208阅读
  • 7回复

qtreeview checkbox的奇怪问题[已解决] [复制链接]

上一主题 下一主题
离线yj_yulin
 

只看楼主 倒序阅读 楼主  发表于: 2010-07-13
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
虽然model已经修改好了数据,并且emit datachanged信号 ,但是checkbox的显示始终是没有同步,
大家看看是个什么问题?
[ 此帖被xtfllbl在2010-07-13 12:48重新编辑 ]
附件: testtree.zip (13 K) 下载次数:51
离线yj_yulin

只看该作者 1楼 发表于: 2010-07-13
修改函数为下面的解决问题
//-------------------------------------------------
void TorgTreeModel::emitDataChanged( TorgTreeItem* item )
{
    TorgTreeItem* parent_item = getOrgItem(item->parent_org_id);
    emit dataChanged(createIndex(item->row(),0,parent_item),createIndex(item->row(),1,parent_item));

    qDebug() << "datachange" << item->org_full_name;
}
离线tootzoe
只看该作者 2楼 发表于: 2010-07-13
楼上的朋友 的有"半选中" 功能的 QTreeView  有做好了吗.....
  我现在也遇到了这个问题, 我也看到你在 Qt centre 上发帖子了, 其实你的问题很简单,   emit layoutChanged(); 就行了, 不需要 重写 dataChanged(),
我现在做了这个功能的一半, 不知道你在处理 父级 的是否选中情况上, 是怎么实现的.....
离线yj_yulin

只看该作者 3楼 发表于: 2010-07-14
谢谢楼上的,还真没想过用layoutChanged,试了下,确实是可以的,只是相对datachanged而言,可能heavy了点,因为view不知道那个东西变了,所以刷新过程不会太优化,不过一般情况下应该都没有太大问题,如果tree不大的话.

datachanged信号是没有问题,我原来是因为发出的信号不对,应该发出itemA的datachanged,结果发出的是itemA的child(0,0).
其实是没有理解好model的index( int row, int column, const QModelIndex &parent /*= QModelIndex()*/ ),
用createIndex时没有注意好

其它细节请看代码.
[ 此帖被yj_yulin在2010-07-14 08:19重新编辑 ]
附件: testtree.zip (21 K) 下载次数:70
离线yj_yulin

只看该作者 4楼 发表于: 2010-07-14
上传 testtree demo图片一张
离线tootzoe
只看该作者 5楼 发表于: 2010-07-14
看了一下你的代码, 你的 model 挺复杂的, 想加入三级子节点都不知道怎么下手....
我的 model 是用 XML 为数据源的,  修改 XML 文件可以加任意多节点, 我用节点指针操作所有节点.....
离线yj_yulin

只看该作者 6楼 发表于: 2010-07-14
其实还是比较简单的.只是demo中的代码确实不怎么好,只是运作原理都一样的.
得到你想要加的parent item的指针,然后生成新child,直接增加就行, model中通过id可以得到任何item的指针
离线蠢蠢欲懂
只看该作者 7楼 发表于: 2012-05-07
顶,好贴子
快速回复
限100 字节
 
上一个 下一个