Russian Qt Forum
Ноябрь 25, 2024, 02:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: вывод данных ,QScrollArea  (Прочитано 19307 раз)
Bepec
Гость
« Ответ #15 : Апрель 24, 2013, 21:49 »

А зачем вам его получать?

Тут идёт разделение отрисовки и данных.

Виджет - View сам знает свои размеры и может ими оперировать. Благодаря тому, что известно сколько занимает один элемент (строк допустим), он запрашивает данные у модели. И уже потом отрисовывает.
Записан
ikar2012
Гость
« Ответ #16 : Апрель 24, 2013, 22:22 »

А зачем вам его получать?

Тут идёт разделение отрисовки и данных.

Виджет - View сам знает свои размеры и может ими оперировать. Благодаря тому, что известно сколько занимает один элемент (строк допустим), он запрашивает данные у модели. И уже потом отрисовывает.
тогда я что-то не понимаю. У меня QTableView при большом количестве столбцов отрисовывает медленно - из чего я делаю вывод что отрисовывает он все, а не только видимые столбцы. При этом ползунки появляются, в принципе данные двигаются - только тормозит все дико.  Попробуйте вывести таблицу например с 1000 столбцами, пусть даже строк там всего 100 будет ( это 100000 байт всего)
И вроде  , разделяются данные и представление? Разве это имеет отношение к отрисовке?
Или я все-таки что-то упустил?

Upd. Возможно имеется ввиду что модель должна определить сколько столбцов, например, ей отдать. Но во первых именно для этого и нужно сначала определить размер вывода ( т к реальных столбцов очень много) , а во вторых я не смог научиться изменять количество столбцов в таблице без операций удаления всех строк и вставки их заново. Кроме того ползунки будут "неправильно" работать, т к соответствующий класс понятия не будет иметь о реальном количестве столбцов. Можно конечно заранее определить максимальное количество столбцов, которые возможно отобразится на данном мониторе ( т е получить разрешение монитора) и всегда выводить. Но опять возникает проблема с ползунками- и честно говоря такой подход не кажется мне правильным. Как- то же делают что все правильно и быстро отображается.
« Последнее редактирование: Апрель 24, 2013, 22:53 от ikar2012 » Записан
Bepec
Гость
« Ответ #17 : Апрель 24, 2013, 22:54 »

Конечно делают правильно ) А вы в корне ошибаетесь Улыбающийся

Вы пытаетесь вывести массив байт по одному элементу, создавая на каждый свой отдельный объект. Нафига? Показает язык

Нарисуйте как вы хотите. Просто сядьте и нарисуйте. Пейнт в руки, смеяться никто не будет ( может быть Подмигивающий ). Заодно потренируетесь в разработке дизайна.
« Последнее редактирование: Апрель 24, 2013, 22:56 от Bepec » Записан
dio
Гость
« Ответ #18 : Апрель 24, 2013, 23:00 »

Попробуйте объединить данные одной строки в столбец и будет вам счастье.
 
Что касается подгрузки данных, то не зная количества строк - не реализуешь. Если все же хотите ее использовать -зафиксируйте размер столбца в байтах и вычислите количество строк.
  
Записан
ikar2012
Гость
« Ответ #19 : Апрель 24, 2013, 23:01 »

Конечно делают правильно ) А вы в корне ошибаетесь Улыбающийся

Вы пытаетесь вывести массив байт по одному элементу, создавая на каждый свой отдельный объект. Нафига? Показает язык

Нарисуйте как вы хотите. Просто сядьте и нарисуйте. Пейнт в руки, смеяться никто не будет ( может быть Подмигивающий ). Заодно потренируетесь в разработке дизайна.

Не совсем понял что имеется ввиду создавая отдельный объект элемент под каждый элемент? Это как? Я все вывожу в один объект , потомок QWidget, переопределив paintEvent.
И не понял что нарисовать? Как должно выводиться? Так чего там рисовать - это все уже есть и даже как-то работает , просто работает не приемлемо. Но "дизайн" никак не зависит и не поменяется - нужно лишь понять как правильно управлять отрисовкой
« Последнее редактирование: Апрель 24, 2013, 23:09 от ikar2012 » Записан
ikar2012
Гость
« Ответ #20 : Апрель 24, 2013, 23:07 »

Попробуйте объединить данные одной строки в столбец и будет вам счастье.
 
Что касается подгрузки данных, то не зная количества строк - не реализуешь. Если все же хотите ее использовать -зафиксируйте размер столбца в байтах и вычислите количество строк.
  
объеденит данные строки в столбец это как? Можно на пальцах.

Как можно зафиксировать размер столбца в описанных условиях и что это даст ( может вы имели ввиду размер строки? -но это тоже не соответсвует условиям) у меня не стоит задачи "притянуть" отображение к таблице - у меня стоит задача отобразится так как надо- т е в виде строк символов ( не важно, отображаемых или нет) с обработкой одного единственного служебного символа - перевод строки ( /n , или он же 0x0a)
Мы точно друг друга понимаем?

Ps в любом случае, всем кто пытается помочь огромное спасибо, но я правда не совсем понимаю что вы предлагаете
Записан
Bepec
Гость
« Ответ #21 : Апрель 24, 2013, 23:23 »

РИСУЙ что хочешь. РИСУЙ!!!!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #22 : Апрель 25, 2013, 06:57 »

Возможно Вы и пройдете весь путь с ScrollArea, определением видимой части и.т.п. Но так будет достигнута только 1 цель: отображение. Понадобится напр выделить параграф - и опять придется сваливаться в низкоуровневую работу. Мне кажется правильно прорываться к TextEdit
Я хочу "кататься по файлу" но TextEdit не подходит, т к он не может с бинарными данными ( проще говоря он "спотыкается" о 0x00, считая это концом, т к работает со стрингами) можно на лету конечно нули вырезать/заменять, но для данной задачи это не очень походит,
Ну так или иначе нужно решать с невидимыми/неудобными символами. Допустим Вы выводите сами, через DrawText. Что меняется в этом случае?
Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #23 : Апрель 25, 2013, 07:06 »

http://code.google.com/p/qhexedit2/
Записан
ikar2012
Гость
« Ответ #24 : Апрель 25, 2013, 08:49 »

Возможно Вы и пройдете весь путь с ScrollArea, определением видимой части и.т.п. Но так будет достигнута только 1 цель: отображение. Понадобится напр выделить параграф - и опять придется сваливаться в низкоуровневую работу. Мне кажется правильно прорываться к TextEdit
Я хочу "кататься по файлу" но TextEdit не подходит, т к он не может с бинарными данными ( проще говоря он "спотыкается" о 0x00, считая это концом, т к работает со стрингами) можно на лету конечно нули вырезать/заменять, но для данной задачи это не очень походит,
Ну так или иначе нужно решать с невидимыми/неудобными символами. Допустим Вы выводите сами, через DrawText. Что меняется в этом случае?
TextEdit не подходит по описанным причинам. когда рисую я просто делаю пропуск на лету, для подачи же в textedit придется скопировать и модифицировать исходные данные.
Записан
ikar2012
Гость
« Ответ #25 : Апрель 25, 2013, 08:50 »

За ссылку огромное спасибо. именно исходники подобного примера искал!!!!
Записан
ikar2012
Гость
« Ответ #26 : Апрель 25, 2013, 09:11 »

Командор, ваш способ работает, по крайней мере на первый взгляд. Еще раз спасибо.
Записан
dio
Гость
« Ответ #27 : Апрель 25, 2013, 10:51 »

объеденит данные строки в столбец это как? Можно на пальцах.
Я имел в виду строку - в ячейку таблицы.

По второму вопросу я, всего лишь, предложил способ реализации частичной подгрузки данных, на случай если Вам требуется отображать большие файлы. Представление данных пользователю и работа с данными внутри программы - это разные задачи. Совсем не обязательно обрабатывать данные в том формате, который требуется для конечного представления пользователю.  
При загрузки данных - считать, что размер строки фиксирован, а при отображении пользователю - приводить ее к соответствующему виду (например, отображением символа перехода на новую строку, или выделением четных\нечетных строк разным цветом).  
Если такой вариант не устраивает, то можно реализовать подгрузку самому. За раз считывать определенное количество строк. На форму добавить кнопку, для загрузки следующей партии.
« Последнее редактирование: Апрель 25, 2013, 11:12 от dio » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #28 : Апрель 25, 2013, 11:17 »

Есть более простой пример:
https://github.com/ABBAPOH/Andromeda/blob/master/src/plugins/bineditorplugin/binedit.h
https://github.com/ABBAPOH/Andromeda/blob/master/src/plugins/bineditorplugin/binedit.cpp

По идее, этих 2х файлов достаточно для работы хексэдита. Как видно, код выдран из QtCreator и вполне рабочий (имеются несколько багов).

В целом, нужно использовать QAbstractScrollArea и рисовать на вьюпорте. Что рисовать вычисляется из значений скроллбаров и размера вьюпорта, деленный на размер шрифта.

Другое дело, не очень понятно... Как вы хотите отображать невидимы символы? Что мешает вырезать 0x00 и прочие невидимые штуки, заменив их, скажем, на пробел? После чего тупо скормить текстэдиту.

Модель-вид тут вообще ни причем.
Записан
ikar2012
Гость
« Ответ #29 : Апрель 25, 2013, 12:27 »

Есть более простой пример:
https://github.com/ABBAPOH/Andromeda/blob/master/src/plugins/bineditorplugin/binedit.h
https://github.com/ABBAPOH/Andromeda/blob/master/src/plugins/bineditorplugin/binedit.cpp

По идее, этих 2х файлов достаточно для работы хексэдита. Как видно, код выдран из QtCreator и вполне рабочий (имеются несколько багов).

В целом, нужно использовать QAbstractScrollArea и рисовать на вьюпорте. Что рисовать вычисляется из значений скроллбаров и размера вьюпорта, деленный на размер шрифта.

Другое дело, не очень понятно... Как вы хотите отображать невидимы символы? Что мешает вырезать 0x00 и прочие невидимые штуки, заменив их, скажем, на пробел? После чего тупо скормить текстэдиту.

Модель-вид тут вообще ни причем.
Да спасибо, собственно практически именно так и делаю. 0x00  в итоге естественно заменяется пробелом, если точнее, то ни чем не заменяется просто делается пропуск на длину пробела. Все это на лету при обрисовке. В исходных данных это делать совсем не удобно, т к отображение это всего лишь отображения, и для замены надо делать копию. Поэтому текстэдит не подходит. Иными словами после приведения данных в вид пригодный для текстэдит данные кроме как для отображения ни для чего не годятся. А отображение, как понимаете, не является конечной целью. кроме того цвет подсветки каждого символа тоже рассчитывается динамически и зависит от многих, постоянно меняющихся факторов. Так что пока остановился на ScrollArea. Примеры начал смотреть, возможно что-то новое в них найду

Собственно вопрос был как получить viewport. Ответ получил выше, проверил. работает.
зы за пример отдельное спасибо
« Последнее редактирование: Апрель 25, 2013, 12:31 от ikar2012 » Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


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