Russian Qt Forum

Qt => Общие вопросы => Тема начата: __Heaven__ от Июнь 16, 2014, 13:36



Название: Как реализовать большое число строк в QAbstractTableModel
Отправлено: __Heaven__ от Июнь 16, 2014, 13:36
Здравствуйте всем!
Не совсем хорошо представляю, как можно унаследоваться от класса QAbstractTableModel (а также QTableView), чтобы реализовать возможность вывода большого количества строк, которое превышает int.
Прошу помочь.


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Old от Июнь 16, 2014, 13:43
Не совсем хорошо представляю, как можно унаследоваться от класса QAbstractTableModel (а также QTableView), чтобы реализовать возможность вывода большого количества строк, которое превышает int.
Никак. Там все завязано на int.
Но столько строк выводить не нужно. Человек все равно ничего с таким объемом сделать не сможет. Лучше сразу вводить системы фильтров.


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Авварон от Июнь 17, 2014, 23:25
я боюсь спросить - а памяти-то хватит на кол-во строк больше инта?) а по сабжу - никак, да... Да и вьюхи стандартные могут не потянуть >50k строк, придётся свою писать


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Bepec от Июнь 18, 2014, 02:53
Что говорить о int строк, если оно при 10к на экране тормозить начинает :)
А таки Old дело говорит - пользователю дай боже в 5 строках разобраться. Зачем ему int строк?


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Fregloin от Июнь 18, 2014, 19:35
Загружать данные частями.


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Old от Июнь 18, 2014, 20:21
Загружать данные частями.
Проблема не в реализации, а в том, что человек физически не сможет оперировать (просмотреть, проанализировать и т.д.) большим количеством данных. Попробуйте найти что-то нужное в таблице из хотя бы 1000 строк. :)


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: __Heaven__ от Июнь 24, 2014, 11:38
Возможно, я не правильно выразился или не правильно понимаю назначение класса...
На сколько я понимаю, при создании модели таблицы нужно минимум переопределить функции rowCount(), columnCount(), и data().
Меня интересует не одновременное отображение большого количества значений на экране, а отображение ячеек, с индексом строки выше пределов int.

Грубо говоря, как реализовать hex-редактор с поддержкой больших файлов?


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Bepec от Июнь 24, 2014, 12:00
Сделать его "скользящим" по файлу придётся вам.
Отобразить и быстро работать с большим объёмом данных не получится. А вот читать по частям файл и выводить на экран в зависимости от желания пользователя вы можете уже сейчас.

QFile::seek вам в помощь.


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: __Heaven__ от Июнь 24, 2014, 12:35
Сделать его "скользящим" по файлу придётся вам.
Отобразить и быстро работать с большим объёмом данных не получится. А вот читать по частям файл и выводить на экран в зависимости от желания пользователя вы можете уже сейчас.

QFile::seek вам в помощь.

Да, я думал насчёт реализации в методе data() QFile::seek, QFile::read. Но каким образом в метод дата передастся переменная row = 5 000 000 000? Внедрять какой-нибудь комбо, который будет делить файл на несколько частей и предлагать пользователю выбор типа "работать начиная с 00000000 байта", "работать работать начиная с 80000000 байта" и т.д. не хотелось бы.


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Igors от Июнь 24, 2014, 12:37
Грубо говоря, как реализовать hex-редактор с поддержкой больших файлов?
Давно (неск лет назад) была подобная попытка (для больших текстовых файлов), я участвовал. 2 варианта исходников были - но вот где, не помню


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Bepec от Июнь 24, 2014, 14:17
Сделайте проще - соедините view и свой progressBar, в котором вы будете делать что хотите :)


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: __Heaven__ от Июнь 24, 2014, 15:10
Сделайте проще - соедините view и свой progressBar, в котором вы будете делать что хотите :)

не совсем понимаю....


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Bepec от Июнь 24, 2014, 16:43
ммм...
Я решал эту проблему, создавая собственный View, совмещая его с progressBar'ом.

Собственно почему я так поступил - при наследовании от QAbstractListModel и иже с ним и установкой количества строк в 50-70000 начинались лаги. Насколько помню там View запрашивает их все при установке модели.

Потому я совместил написал свой View совмещенный с моделью.


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: __Heaven__ от Июнь 24, 2014, 16:56
ммм...
Я решал эту проблему, создавая собственный View, совмещая его с progressBar'ом.

Собственно почему я так поступил - при наследовании от QAbstractListModel и иже с ним и установкой количества строк в 50-70000 начинались лаги. Насколько помню там View запрашивает их все при установке модели.

Потому я совместил написал свой View совмещенный с моделью.

progressBar - Вы scroll имеете в виду? А за размер таблицы взять какое-нибудь небольшое число?
Боюсь, что опыта не хватит мне  :) не совсем представляю, как там будут работать клавиши вниз, вверх, PgDn, PgUp, ctrl+home, ctrl+end и подобные... Не представляю, как сделать так, чтобы вьюха не спотыкалась при скроллинге клавиатурой.


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Bepec от Июнь 24, 2014, 17:03
тьфу. ScrollBar конечно :)
А за размер таблицы взять размер файла, поделённый на текущее количество строк в View :) Ну и размер строки конечно учитывается.

Собственно т.к. самописное - то самому писать поведение клавиш :)


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: Авварон от Июнь 24, 2014, 18:00
Есть мнение, что для хекс-редактора не подходят айтемвью, лучше взять QAScrollArea и на ней рисовать ручками.
Как вариант, можно выдернуть хекс-редактор из креатора, это не сложно делается


Название: Re: Как реализовать большое число строк в QAbstractTableModel
Отправлено: __Heaven__ от Июнь 25, 2014, 08:23
тьфу. ScrollBar конечно :)
А за размер таблицы взять размер файла, поделённый на текущее количество строк в View :) Ну и размер строки конечно учитывается.

Собственно т.к. самописное - то самому писать поведение клавиш :)

Глаза пока боятся :)
Спасибо за совет. Мне перед реализацией придётся набраться смелости :)

Есть мнение, что для хекс-редактора не подходят айтемвью, лучше взять QAScrollArea и на ней рисовать ручками.
Как вариант, можно выдернуть хекс-редактор из креатора, это не сложно делается

Я на данный момент вывожу в таблицу до 250 мб данные в hex. Проблема ещё заключается в том, что вывод hex - это  одна из функций программы. Основное её назначение вывод в таблицу значений int, dbl, float, text и др., которые переводятся из т.н. rawData. Так что в моём случае получается, что табличное представление, наверное, оптимальный вариант.