Название: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: tem1k от Ноябрь 10, 2009, 14:04 Есть QTableVeiw в котором показаны файлы через QDirModel. Хочу вставить строку с именем ".." для перехода в предыдущий каталог и так каждый раз при открытии нового каталога. Знаю о существовании функции
Код: insertRow ( int row, const QModelIndex & parent = QModelIndex() ) Код: QModelIndex & parent = QModelIndex() Заранее благодарен. Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: Авварон от Ноябрь 10, 2009, 14:09 QModelIndex index ( const QString & path, int column = 0 ) const
индекс - позиция в ячейке. Индексы в 1м столбце можно ассоциировать с файлами и папками: допустим folder - папка, ей соответствует индекс index тогда для folder/folder2: index2 это индекс с координатами (0, 0, index); для folder/file1: index3 это индекс с координатами (1, 0, index); для folder/folder2/folder3 index3 это индекс с координатами (0, 0, index2); т.е. парент в твоем случае - это индекс, ассоциированный с папкой в которую хочешь вставить ".." Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: tem1k от Ноябрь 10, 2009, 14:48 Спасибо за объяснение. Теперь примерно я понимаю. Следовательно для вставки, допустим по даблклику я должен писать так:
Код: void F_MainWindow::on_TreeView_doubleClicked(QModelIndex index) я правильно понял ? Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: Авварон от Ноябрь 10, 2009, 14:54 это вставит 1 ряд _внутрь_ индекса, по которому кликнул. Т.е. в случае папки создаст подпапку, в случае файла сделает ряд внутри файла (что немного сносит мозг:))
Я кстати не уверен, что можно так с дир моделью извращаться) Если получится, напиши обязательно, мне тоже надо бы ".." в моей модели реализовать, но не переписывая структуру дерева Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: tem1k от Ноябрь 10, 2009, 15:03 Понятно. Но дело в том что
Код: qDebug() << ui.treeView->model()->insertRow(0,index); Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: Авварон от Ноябрь 10, 2009, 15:08 ну как минимум у QDirModel этот метод не переопределен. Следовательно наследуется от QAbstractItemModel. А там он пустой должен быть
Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: tem1k от Ноябрь 10, 2009, 15:49 Вы не могли бы помочь предопределить данный метод...
Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: tem1k от Ноябрь 10, 2009, 17:22 Я начал делать вот так. Создал класс унаследованный от QAbstractItemModel. Имею там такую функцию
Код: insertRowl(QDirModel *model, int position, int rows, QModelIndex index) Хотя бы подскажите, я на правильном пути ? Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: Авварон от Ноябрь 10, 2009, 17:29 если делается insertRow то сначала вставляется пустые данные. А затем делается setData на вставленные индексы. Но ткое поведение не шибко хорошо для DirModel (тк ее состоянием управляет ФС).
Кстати мб стоит сделать прокси-модель... Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: tem1k от Ноябрь 10, 2009, 17:40 А можно ли сделать таким образом ?
Установить для DirModel флаги model->setFilter(QDir::Hidden | QDir::System | QDir::AllEntries); Тогда получим еще две строки: текущий каталог "." и парент "..". И удалить строку ".". Но насколько я понимаю удаляя индекс текущего каталога "." мы удалим из модели весь текущий каталог. Я прав или все таки ошибаюсь ? Название: Re: QDirModel + insertRow. Помогите, не могу вставить строку. Отправлено: bjaka_max от Ноябрь 29, 2009, 09:43 Я это решил так:
Код: fileModel = new QDirModel; |