• 8619阅读
  • 17回复

关于treeView的三个问题 [复制链接]

上一主题 下一主题
离线yzpdsg
 

只看楼主 倒序阅读 楼主  发表于: 2011-07-14
— 本帖被 XChinux 从 Qt基础编程 移动到本区(2011-07-14) —
大家好!

      我使用treeView时遇到了两个问题
1、如何显示指定目录?我尝试了下面的代码,结果不是我想要的。treeView只是列出了所有驱动器,如下图所示:
QDirModel *dirModel = new QDirModel(this);
ui->treeView->setRootIndex(dirModel->index(QDir::currentPath()));
ui->treeView->setModel(dirModel);


图1

2、如何显示指定目录的某类文件,如该目录下的所有MP3文件?

3、如何点击某个显示的文件后执行相应动作(如点击mp3文件就进行播放)?



离线alexltr

只看该作者 1楼 发表于: 2011-07-14
1. 用QFileSystemModel吧。
2. QFileSystemModel::setFilter ( QDir::Filters filters )  
3. void doubleClicked ( const QModelIndex & index )

以上仅供参考,没有测试过。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线zhengqiang
只看该作者 2楼 发表于: 2011-07-15
我使用过QFileSystemModel, 然后用QListView可以实现你想要的效果。
离线yzpdsg

只看该作者 3楼 发表于: 2011-07-16
回 1楼(alexltr) 和2楼(zhengqiang)的帖子
谢谢,我试试。
离线yzpdsg

只看该作者 4楼 发表于: 2011-07-16
回 1楼(alexltr) 的帖子
谢谢,我已经实现了文件夹内容的显示。目前还有一个问题:

如何获取选中行第一列的内容?我尝试了
    int n = ui->treeView->currentIndex().row();
    QString str = fsm->data(fsm->index(n,0)).toString();
可是返回的内容不是我需要的。比如,我显示的目录是D:/music/selected,上面的代码返回的是D:或empty
,而不是我想要的D:/music/selected。
离线alexltr

只看该作者 5楼 发表于: 2011-07-16
我觉得应该通过model index去存取model里的内容。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线yzpdsg

只看该作者 6楼 发表于: 2011-07-17
回 5楼(alexltr) 的帖子
fsm是QFileSystemModel型指针。我觉得应该没有问题的捏?可是读出的东西就是不对。
离线alexltr

只看该作者 7楼 发表于: 2011-07-17
index = ui->treeView->currentIndex();
QString str = fsm->filePath(index);
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 8楼 发表于: 2011-07-17
还有,如果你要建立一个树形模型的索引,除了行号和列号,不要忘了parent index!
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 9楼 发表于: 2011-07-17
你上面建立的index没有指定parent index,它会默认使用一个无效的index作为parent index。这样建立的index是指向顶层项的。所以它只返回D:
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线yzpdsg

只看该作者 10楼 发表于: 2011-07-18
回 9楼(alexltr) 的帖子
谢谢,解决了。不过还是不太明白,这里parent index指的是什么?
index = ui->treeView->currentIndex();//这句是建立parent index么?
QString str = fsm->filePath(index);
离线alexltr

只看该作者 11楼 发表于: 2011-07-18
Re:回 9楼(alexltr) 的帖子
引用第10楼yzpdsg于2011-07-18 11:21发表的 回 9楼(alexltr) 的帖子 :
谢谢,解决了。不过还是不太明白,这里parent index指的是什么?
index = ui->treeView->currentIndex();//这句是建立parent index么?
QString str = fsm->filePath(index);  


不是.

我指的是你的代碼: .......index(n,0)......
請參考文檔 Model/View Programming

我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线yzpdsg

只看该作者 12楼 发表于: 2011-07-20
回 11楼(alexltr) 的帖子
谢谢,这回了然了。

可是关于第二个问题,即如何显示指定扩展名的文件,还是没明白。查文档后发现QFileSystemModel::setFilter()的参数是QDir::Filters filters。

将代码改成如下:
    //设置filter
    QStringList filter;
    filter<<"*.jpg"<<"*.bmp"<<"*.jpeg"<<"*.png";
    imageList = dir.entryList(filter,QDir::Files | QDir::NoSymLinks,QDir::Name);
    fsm->setFilter(QDir::AllEntries);

    ui->treeView->setModel(fsm);
    ui->treeView->setRootIndex(fsm->setRootPath(str));

可是依然显示了所有的文件。看来我还是不会用setFilter()。
离线alexltr

只看该作者 13楼 发表于: 2011-07-20
void QFileSystemModel::setNameFilters ( const QStringList & filters )


fsm->setNameFilters ( filter);  // not sure, just try!
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线yzpdsg

只看该作者 14楼 发表于: 2011-07-20
使用的效果是未在filter中的文件变成灰色的了,如图所示。


能否不显示这些文件呢?
离线yzpdsg

只看该作者 15楼 发表于: 2011-07-20
回 13楼(alexltr) 的帖子
使用的效果是未在filter中的文件变成灰色的了,如图所示。

能否不显示这些文件呢?
离线alexltr

只看该作者 16楼 发表于: 2011-07-20
fsm->setNameFilterDisables(false);

这些文档里面都有。自己看一下文档基本就可以解决了。
我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线netlove

只看该作者 17楼 发表于: 2012-02-21
学习
快速回复
限100 字节
 
上一个 下一个