Russian Qt Forum

Qt => Model-View (MV) => Тема начата: YvenTitan от Сентябрь 11, 2019, 18:14



Название: Вставка строк в QSortFilterProxyModel древовидной модели
Отправлено: YvenTitan от Сентябрь 11, 2019, 18:14
Здравствуйте
У меня в QTreeView вставлена модель QSortFilterProxyModel, которая берет данные из QAbstractItemModel(sourceModel).
Я хочу вставлять строки в древовидную модель следующим образом: пользователь правой кнопкой мыши нажимает на элемент, которому хочет добавить child; во всплывающем окне пишет его имя и, по идее, должен вставиться новый элемент.
Функцией QTreeView::selectedIndexes, можно определить (если я правильно понимаю) только индекс для QSortFilterProxyModel. Строка вставляется в ее sourceModel. Чтобы вставку выполнить надо знать индекс родителя в sourceModel, а не в QSortFilterProxyModel.
В целом хочу сделать древовидную модель, в которую можно вставить элемент и элементы которого могут сортироваться (в пределах одного уровня, чтобы дети одного родителя могли идти по алфавиту)
Можно, сделать сортировку через пользовательскую функцию пределах модели QAbstractItemModel, но, кажется, что правильнее через QSortFilterProxyModel.

Можете идеологически подсказать, как организовать вставку строки в такую древовидную модель, когда пользователь через графический интерфейс указывает, какому родителю вставить ребенка?


Название: Re: Вставка строк в QSortFilterProxyModel древовидной модели
Отправлено: ssoft от Сентябрь 12, 2019, 07:50
Соотношения индексов sourceModel и QSortFilterProxyModel можно получить с помощью методов

Код
C++ (Qt)
virtual QModelIndex mapFromSource(const QModelIndex &sourceIndex) const override;
virtual QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const override;
virtual QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const override;
virtual QModelIndex mapToSource(const QModelIndex &proxyIndex) const override;
 


Название: Re: Вставка строк в QSortFilterProxyModel древовидной модели
Отправлено: YvenTitan от Сентябрь 12, 2019, 09:42
Спасибо, помогло!