Qt QTreeView检查所选文件夹是否已展开并实现树视图导航

时间:2018-05-15 20:49:17

标签: qt treeview

我想在Qt中对QTreeView对象实现手动控制。 (这意味着将对所有内容进行程序控制,包括导航)到目前为止,我已经在兄弟姐妹中实现了导航/选择。但是,我想建立一个更容易控制的状态,是否有扩展的文件夹。如果在Qt API中没有实现这样的方法,我将不得不知道是否扩展了所选的文件夹项。

例如,为了检查项目是否是文件夹,我检查我的目录模型并进行字符串比较(我知道这不是最好的方法,但我不知道Qt API是否也具有此功能):

int MainWindow::checkIfFolder_treeview (void)
{
    /* Check if highlighted item is a folder by checking type name*/
    QModelIndex index_foldersearch = ui->treeView->currentIndex().sibling(ui->treeView->currentIndex().row(), 2);
    QVariant data_foldersearch = ui->treeView->model()->data(index_foldersearch);
    //qDebug() << "typeName:" << data_foldersearch.toString();
    if (QString::compare("Folder", data_foldersearch.toString()) == 0)
    {
        /* Selected item is a folder!*/
        return 0;
    }
    else
        return -1;
}

要转到下一个项目,我使用:

ui->treeView->setCurrentIndex(ui->treeView->currentIndex().sibling(ui->treeView->currentIndex().row()+1, 0));

ui->treeView->selectionModel()->select(ui->treeView->currentIndex(), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);

回到原始问题,任何帮助:

  • 确定所选项目是扩展文件夹还是非扩展文件夹
  • 轻松浏览项目(下一项功能和上一项功能),而不区分兄弟,父或子功能

非常感谢。

1 个答案:

答案 0 :(得分:4)

文档有一个函数“isExpanded”,只需传入modelindex。

http://doc.qt.io/qt-5/qtreeview.html#isExpanded

对于导航,您可以使用indexAboveindexBelow功能。文档链接如下:

http://doc.qt.io/qt-5/qtreeview.html#indexAbove

http://doc.qt.io/qt-5/qtreeview.html#indexBelow