| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > QTreeView не обновляется |
| Автор: olegkuzn 15.11.2012, 09:55 | ||
| Здраствуйте. Помогите решить проблему : Есть класс производный от QTreeView который выводит информацию примерно в виде : 1-+ |-1.1 |-1.2 |-1.3 2-+ |-2.1 |-2.2 |-2.3 Есть класс производный от QAbstractItemModel в котором реализованя функция InsertRow :
При отрабатывании ф-ции для первой группы элемент QTreeView изменяется таким образом : 1-+ |-1.1 |-Новый элемент |-1.2 |-1.3 2-+ |-2.1 |-2.2 |-2.3 При отрабатывании ф-ции для второй группы элемент QTreeView изменяется таким образом : 1-+ |-1.1 |-1.2 |-1.3 2-+ |-2.1 |-Новый элемент |-2.3 Если вторую группу свернуть и развернуть снова то элементы приобретают вид : 1-+ |-1.1 |-1.2 |-1.3 2-+ |-2.1 |-2.2 |-Новый элемент |-2.3 как сделать так чтобы вторая группа отрабатывала правильно. Заранее спасибо. |
| Автор: olegkuzn 15.11.2012, 13:12 |
| Задача частично решена с помощью вызова сигнала : emit layoutChanged(); Спасибо всем кто читал данную тему. |
| Автор: math64 15.11.2012, 13:18 |
| insertRow() - не виртуальная функция, нужно переопределять insertRows() |
| Автор: olegkuzn 15.11.2012, 15:55 |
| Вопрос из чистого любопытства Если переопределить insertRows тогда для чего используется метод insertRow? Если в методе insertRows каждый раз когда я добавляю новую строку нужно ли вызывать метод insertRow? |
| Автор: math64 16.11.2012, 08:51 |
| insertRow() вызывает insertRows() для вставки одной строки. insertRow() не является виртульной функцией, если ты её переопределяешь, ты скрываешь просто оригинальную функцию. В твоём коде будет вызываться твоя функция, а в QTreeView в методом setModel() ты передаешь указатель на базовый класс, QAbstractItemModel. Поэтому если QTreeView захочет вставить строку, он вызовет QAbstractItemModel::insertRow(), а не твою EditModel::insertRow(). А скорее всего, он вызовет сразу insertRows() - например, при drag-and-drop не будет разбираться сколько строк нужно вставить, одну или несколько. |