在treeview中,怎么才能获取item的绝度路径呢?
之前在练习listview时,可以使用:
QString Item = ui->listView->model()->data(index).toString();
来获取选中项的字符串。在treeview中,这样还是可以获取的,但是treeview和listbiew不同的是,它可以展开也可以这点,这时候,光有字符串就不够用了,我得知道他的层级关系啊,有绝对路径就好了
为此,尝试了添加展开和折叠的槽函数,试图记录每一次展开折叠的信息,结果忽然发现,展开是可以的,因为必须一层一层的展开,但折叠就不一样了,不见得肯定得一层一层的折叠啊,有可能在根目录就直接折叠了,又乱套了。
后来发现,其实根本用不着用展开和折叠的事件,直接在单击事件中,用filesystemmodel就可以获取当前绝度路径。这下就方便了,我每次单击一个条目,都可以获取他的绝对路径。
附上源码:
// 获取选中条目的绝对路径并显示
QString curItemRel = ui->treeView->model()->data(index).toString();
curItem = filesystem->fileInfo(index).absolutePath()+"/"+curItemRel;
ui->label->setText("展开:"+curItem);
其实重点就一句,在通过model()获得当前数据后,直接调用fileinfo函数,获取绝对路径,然后再加上当前条路就可以了。比方说:当前路径是d:/test,再加上条目为hello.txt,连起来就是
d:test/hello.txt
看一下效果图:
当我单击某个子项的条目时,也可以获取正确的路径:
折叠回来也不会出错:
这个解决方案我还是比较满意的,之前写了几十行代码,现在几行就搞定了。
完整代码下载: