Я хочу реализовать ручное управление объектом QTreeView в Qt.(Это означает, что будет программный контроль всего, включая навигацию). До сих пор я реализовал навигацию / выбор в братьях и сестрах.Тем не менее, я хочу установить состояние, в котором легче контролировать, есть ли расширенные папки или нет.Если в 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);
Возвращаясь к исходным вопросам, любая помощь в отношении:
- , определяющая, является ливыбранный элемент - это развернутая или не развернутая папка
- , с которой легко перемещаться по элементам (функция следующего элемента и функция предыдущего элемента) без различия между родственными, родительскими или дочерними функциями
с благодарностью.