Russian Qt Forum
Июнь 16, 2024, 03:10 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кривая работа QTableView  (Прочитано 5666 раз)
LamerDrv
Гость
« : Август 04, 2005, 19:16 »

Народ, а что это у них с гридом. В смысле с тем, который зовется QTableView. Как он видет себя при отображении данных из БД . Это же безобразие какое-то! А что пишут в доке:

The QDataTable class has been renamed Q3DataTable and moved to the Qt3Support library. It is expected that Qt 4.1 will offer a replacement class. In the meantime, you can use Q3DataTable for creating data-aware forms or you can roll your own.

Подождите стало быть нормального компонента до QT 4.1 или выкручивайтесь как хотите (причем Q3DataTable нет редакторе форм, так что его еще надо туда прикручивать или создавать в своем коде ручками ).

Все на борьбу с гридом! :!: … т.е. не с гридом а за грид.

Во-первых глюк с пропаданием индикатора текущей позиции в тот момент, когда происходит подчитка (fetch) данных из базы. Увидеть его можно на таблицах содержащих более 256 записей: переходим на 256-ю запись (в этот момент вертикальный скроллер находится в самом низу потому что остальные записи еще не считаны), затем жмем мышкой стрелку вниз на скроллере … и в этот момент индикатор текущей позиции исчезает.
По этому поводу предлагаю следующее:
в строке 419 файла qabstractitemmodel.cpp знак ‘>=’ заменить на ‘>’. Т.е. вместо
if (index.isValid() && index.parent() == parent && index.row() >= first)
написать
if (index.isValid() && index.parent() == parent && index.row() > first)
Хотелось бы услышать мнение людей имеющих большой опыт работы с QT. Может быть есть более идеологически правильное решение ? Да и это потестить бы не мешало, а то вдруг не для всех ситаций подходит.

Во-вторых клавиатура. Это ж просто песня. Когда доходим до 256 записи, то прокрутить дальше можно только мышкой. Сколько не дави на курсорные клавиши на клаве - все равно получишь шайбу.
Записан
jindos
Гость
« Ответ #1 : Август 05, 2005, 08:53 »

К сожалению, для Qt такие глюки при работе с таблицами не новость(((... В таких случаях на самом деле нужно лезть в исходники и править все под себя... Поэтому исправляй и пиши, что получилось...
Записан
LamerDrv
Гость
« Ответ #2 : Август 06, 2005, 15:47 »

Решение о внесении изменений в 419-ую строку файла qabstractitemmodel.cpp (в метод void QAbstractItemModelPrivate::rowsAboutToBeInserted) оказалось неверным. Эта модификация вроде бы исправляет глюк с пропаданием индикатора текущей позиции в момент дочитки записей, но при этом нарушает семантику метода rowsAboutToBeInserted. Ошибка не в самом методе rowsAboutToBeInserted, а в коде который вызывает этот метод - вызывает с неправильными параметрами. Поднимаемся вверх по стеку вызовов и попадаем в метод
void QSqlQueryModelPrivate::prefetch(int limit)
Именно, в нем формируются значения, которые затем попадают в метод QAbstractItemModelPrivate::rowsAboutToBeInserted.
Проще всего, по-моему, внести исправление в строке
emit q->beginInsertRows(QModelIndex(), oldBottom.row(), newBottom.row()); (строка 55 файла qsqlquerymodel.cpp )
заменив ее на
emit q->beginInsertRows(QModelIndex(), oldBottom.row()+1, newBottom.row()+1);
У меня после этого изменения работает нормально.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.041 секунд. Запросов: 20.