Как добавить элемент в модель в Qt4 и получить индекс для недавно добавленного элемента - PullRequest
1 голос
/ 05 марта 2012

У меня есть окно, которое содержит QTreeView (databaseTreeView) на подклассе QAbstractTableModel (через QSortFilterProxyModel).У меня есть кнопка [Добавить], которая вызывает ui->databaseTreeView->model()->insertRow(ui->databaseTreeView->model()->rowCount());.У меня также есть кнопка [Редактировать], которая использует ui->databaseTreeView->selectionModel()->currentIndex(); для передачи индекса в окно редактора.

Я бы хотел, чтобы кнопка [Добавить] автоматически открывала редактор с индексом недавносоздан элемент, но поскольку модель отсортирована, я не могу использовать номер строки, в которую я вставил строку.Кроме того, insertRows() возвращает только логическое значение (для моей ситуации индекс был бы гораздо удобнее, поэтому мне интересно, может ли кто-нибудь сказать мне, как получить индекс недавно добавленного элемента).

I 'Я хочу посвятить этому два или три часа, рефакторинг, если нет альтернативы, но я бы подумал, что это должно быть довольно просто.Я с любопытством смотрю на сигнал QAbstractItemModel::rowsInserted, но он просто возвращает строки, которые я дал insertRows(), и редактирует последний элемент в списке, независимо от того, был ли он добавлен.

Полный текст источника можно найти по адресу https://github.com/megamasha/FlashKard, чтобы каждый мог ближе познакомиться.

Ответы [ 2 ]

0 голосов
/ 06 марта 2012

Что ж, похоже, мне удалось ответить на мой собственный вопрос - я добавил свой собственный сигнал в класс модели и отправил его из функции addRows(). Затем я подключил его к слоту в соответствующем окне, чтобы он мог создать редактор в качестве дочернего элемента.

Мне все еще было бы интересно услышать предложения, которые менее похожи на хитрый обходной путь - я чувствую, что должен иметь возможность использовать уже существующие слоты для достижения той же цели.

Я посмотрю, может ли mapToSource() быть полезным ...

0 голосов
/ 06 марта 2012

http://doc.qt.nokia.com/4.7/qsortfilterproxymodel.html#details и QSortFilterProxyModel действует как оболочка для исходной модели."Если вам нужно преобразовать исходные QModelIndexes в отсортированные / отфильтрованные модельные индексы или наоборот, используйте mapToSource (), mapFromSource (), mapSelectionToSource () и mapSelectionFromSource (). "

...