我想在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);
回到最初的问题,任何帮助:
- 确定所选项目是展开文件夹还是非展开文件夹
- 轻松浏览项目(下一项函数和上一项函数),而无需区分同级、父级或子级函数
非常感谢。
文档有一个函数"isExpanded",只需传入 modelindex。
http://doc.qt.io/qt-5/qtreeview.html#isExpanded
对于导航,您可以使用indexAbove
和indexBelow
功能。 文档链接如下
http://doc.qt.io/qt-5/qtreeview.html#indexAbove
http://doc.qt.io/qt-5/qtreeview.html#indexBelow