Qt QTreeView indexBelow不起作用

时间:2018-05-16 11:24:07

标签: qt

据我所知,indexBelow函数用于导航到Qt QTreeView中树上的下一个项目。我想编写两个函数 - 一个用于移动到下一个项目,一个用于移动到基于DirModel的TreeView中的上一个项目。但是,indexBelow只能工作一次。

考虑ui是UI变量,以下是我移动到下一个项目的功能

void MainWindow::moveDown (void)
{
    QModelIndex index_it = ui->treeView->indexBelow(ui->treeView->currentIndex());
        qDebug() << index_it.row();
        if (index_it.isValid())
        {
            qDebug() << "Valid";
            ui->treeView->setCurrentIndex(index_it);
            ui->treeView->selectionModel()->select(index_it, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
        }
}

按下按钮时,将触发此按钮,并使用按钮导航树。但是,这只能工作一次,然后停止工作。请注意,即使有扩展的孩子,我也希望能够移动到下一个项目。任何指针和帮助都非常感激。

1 个答案:

答案 0 :(得分:2)

刚试过你的代码,它运行正常。

MainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>


#include <QStandardItemModel>
#include <QFileSystemModel>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


}
MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{


        model->setReadOnly(false);

        model->setSorting(QDir::DirsFirst |
                          QDir::IgnoreCase |
                          QDir::Name);


       ui->treeView->setModel(model);
       index = model->index("C:/");

   // Set initial view of directory
   // for the selected drive as expanded
   ui->treeView->expand(index);

   // Make it scroll to the selected
   ui->treeView->scrollTo(index);

   // Highlight the selected
   ui->treeView->setCurrentIndex(ui->treeView->indexBelow(index));

   // Resizing the column - first column
   ui->treeView->resizeColumnToContents(0);

}



void MainWindow::on_pushButton_3_clicked()//<------Your function MoveDown
{
    QModelIndex index_it = ui->treeView->indexBelow(ui->treeView 
   ->currentIndex());
       qDebug() << index_it.row();
       if (index_it.isValid())
       {
           qDebug() << "Valid";
           ui->treeView->setCurrentIndex(index_it);
           ui->treeView->selectionModel()->select(index_it, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
       }

}

和mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QModelIndex>
#include <QDirModel>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    emitProgress(int per)
    {
       emit signalProgress(per);
    }
    void on_pushButton_clicked();


    void on_pushButton_3_clicked();

signals:

private:
    Ui::MainWindow *ui;
    QModelIndex index;
    QDirModel* model = new QDirModel(this);
   };