2012-03-05 4 views
1

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

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

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

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

ответ

0

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

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

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

0

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

+0

Спасибо за цитату, но это не вопрос перехода от одного индекса к другому - это вопрос не имеющий индекс в первую очередь. В любом случае, я нашел решение. Я выполнил свой собственный сигнал, отправленный из функции 'addRows()' и связал его с слотом, который открывает эту карту для редактирования. –

 Смежные вопросы

  • Нет связанных вопросов^_^