【问题标题】:Qt QTreeView Check if a selected folder is expanded and achieving treeview navigationQt QTreeView 检查选定文件夹是否展开并实现树状导航
【发布时间】:2018-05-16 06:51:29
【问题描述】:

我想在 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);

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

  • 确定所选项目是展开文件夹还是未展开文件夹
  • 轻松浏览项目(下一个项目函数和上一个项目函数),而无需区分兄弟、父或子函数

非常感谢。

【问题讨论】:

    标签: qt treeview


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我错过了
    猜你喜欢
    • 2015-02-04
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多