Qt QTreeView 检查选定文件夹是否展开并实现树形导航

标签 qt treeview

我想在 Qt 中实现对 QTreeView 对象的手动控制。 (这意味着将对一切进行编程控制,包括导航)到目前为止,我已经在 sibling 中实现了导航/选择。但是,我想建立一个更容易控制的状态,无论是否有展开的文件夹。如果 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);

回到原来的问题,任何帮助:

  • 确定所选项目是展开文件夹还是非展开文件夹
  • 轻松浏览项目(下一个项目功能和上一个项目功能),而无需区分同级、父级或子级功能

非常感谢。

最佳答案

文档有一个函数“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

关于Qt QTreeView 检查选定文件夹是否展开并实现树形导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50358968/

相关文章:

JavaFX TableView NullPointerException

无法使用互斥复选框实现 TreeView

qt - 如何将QTableWidgetItem图标放置在单元格的中心

c++ - QGLWidget 中的 makeCurrent() 在哪里使用?

c++ - 如何在 Qprocess 中运行 FFmpeg 命令以使其工作?

c# - 如何识别选中的 TreeNode 的名称是命名空间还是类?

c++ - 如何有效地选择符合特定条件的 QTableView 行的子集?

c++ - Qt GUI 应用程序在与 gui 交互时停止实时进程

java - 如何在 TreeItem JavaFX 上添加 KeyListener?

sql - 想出算法 : Calculate full earnings for every company