在QFileSystemModel中找到第n个文件/文件夹

时间:2017-04-11 15:21:55

标签: c++ qt qt4

我正在使用QFileSystemModel和QTreeView,我试图让TreeView默认选择第一个文件夹/文件。为此,我需要获取第一个文件夹/文件的索引,但我找不到在QFileSystemModel中执行此操作的方法。

你能帮我吗?

提前谢谢。

我尝试了setCurrentIndex(_model->index(x, y)),但它没有用。这是我的代码和显示的树:

void CodeView::finished_loading(QString file) {
        qDebug()<<"Currently selected : " << _model->fileName( ui->treeView->currentIndex());
        qDebug()<<"(0,0) "<< _model->fileName(_model->index(0,0));
        qDebug()<<"(1,0) "<< _model->fileName(_model->index(1,0));
        qDebug()<<"(2,0) "<< _model->fileName(_model->index(2,0));
        qDebug()<<"(3,0) "<< _model->fileName(_model->index(3,0));
        qDebug()<<"(0,0) "<< _model->fileName(_model->index(0,0));
        qDebug()<<"(1,1) "<< _model->fileName(_model->index(1,1));
        qDebug()<<"(2,1) "<< _model->fileName(_model->index(2,1));
        qDebug()<<"(3,1) "<< _model->fileName(_model->index(3,1));
        ui->treeView->setCurrentIndex(_model.index(1,0));
        qDebug()<<"New selected : " << _model->fileName( ui->treeView->currentIndex());
}

输出:

Currently selected :  "Wassim Gharbi"
(0,0)  "/"
(1,0)  ""
(2,0)  ""
(3,0)  ""
(0,0)  "/"
(1,1)  ""
(2,1)  ""
(3,1)  ""
New selected :  "Wassim Gharbi"

Tree

2 个答案:

答案 0 :(得分:0)

该方法不在模型中,而是在视图中。

 QTreeView::setCurrentIndex

来自文档:

  

QAbstractItemView :: setCurrentIndex(const QModelIndex&amp; index)设置   当前项目是索引处的项目。

     

除非当前选择模式为NoSelection,否则该项目也是   选择。请注意,此功能还会更新起始位置   对于用户执行的任何新选择。

     

要将项目设置为当前项目而不选择它,请调用

     

selectionModel的() - &GT; setCurrentIndex(指数,   QItemSelectionModel :: NOUPDATE);

     

另请参见currentIndex(),currentChanged()和selectionMode。

第一个文件夹的代码乍一看并不容易,但你需要记住,模型上的数据抽象使它变得强大,同时又很麻烦,因此任何项目都可能是文件夹或文件,我们需要检查一下:

if (model->rowCount()) // has at least one file or folder
{
   QModelIndex current = model->index(0,0);
   if (model->rowCount(current) == 0); // it's a file.
      return current;
   else {
      // walk the tree trying to find the first file on the folders.
      while(model->rowCount(current) > 0) {
          current = model->index(0,0,current);
      }
      if (index.isValid())
         return index; // our file inside folders
      else 
         return QModelIndex(); // no file inside folders.
   }
}

答案 1 :(得分:0)

要在模型中的特定位置获取索引,请使用QModelIndex::child(row, column)

QFileSystemModel *model = new QFileSystemModel();
model->setRootPath("C:/Qt");//your path

ui->treeView->setModel(model);
ui->treeView->setCurrentIndex(model->index(0, 0).child(0, 0));

我可以从你的问题中看出你不明白树视图的行和列系统是如何工作的。请阅读documentation