Russian Qt Forum
Ноябрь 25, 2024, 02:35
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
вывод данных ,QScrollArea
Страниц:
1
[
2
]
3
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: вывод данных ,QScrollArea (Прочитано 19289 раз)
Bepec
Гость
Re: вывод данных ,QScrollArea
«
Ответ #15 :
Апрель 24, 2013, 21:49 »
А зачем вам его получать?
Тут идёт разделение отрисовки и данных.
Виджет - View сам знает свои размеры и может ими оперировать. Благодаря тому, что известно сколько занимает один элемент (строк допустим), он запрашивает данные у модели. И уже потом отрисовывает.
Записан
ikar2012
Гость
Re: вывод данных ,QScrollArea
«
Ответ #16 :
Апрель 24, 2013, 22:22 »
Цитата: Bepec от Апрель 24, 2013, 21:49
А зачем вам его получать?
Тут идёт разделение отрисовки и данных.
Виджет - View сам знает свои размеры и может ими оперировать. Благодаря тому, что известно сколько занимает один элемент (строк допустим), он запрашивает данные у модели. И уже потом отрисовывает.
тогда я что-то не понимаю. У меня QTableView при большом количестве столбцов отрисовывает медленно - из чего я делаю вывод что отрисовывает он все, а не только видимые столбцы. При этом ползунки появляются, в принципе данные двигаются - только тормозит все дико. Попробуйте вывести таблицу например с 1000 столбцами, пусть даже строк там всего 100 будет ( это 100000 байт всего)
И вроде , разделяются данные и представление? Разве это имеет отношение к отрисовке?
Или я все-таки что-то упустил?
Upd. Возможно имеется ввиду что модель должна определить сколько столбцов, например, ей отдать. Но во первых именно для этого и нужно сначала определить размер вывода ( т к реальных столбцов очень много) , а во вторых я не смог научиться изменять количество столбцов в таблице без операций удаления всех строк и вставки их заново. Кроме того ползунки будут "неправильно" работать, т к соответствующий класс понятия не будет иметь о реальном количестве столбцов. Можно конечно заранее определить максимальное количество столбцов, которые возможно отобразится на данном мониторе ( т е получить разрешение монитора) и всегда выводить. Но опять возникает проблема с ползунками- и честно говоря такой подход не кажется мне правильным. Как- то же делают что все правильно и быстро отображается.
«
Последнее редактирование: Апрель 24, 2013, 22:53 от ikar2012
»
Записан
Bepec
Гость
Re: вывод данных ,QScrollArea
«
Ответ #17 :
Апрель 24, 2013, 22:54 »
Конечно делают правильно ) А вы в корне ошибаетесь
Вы пытаетесь вывести массив байт по одному элементу, создавая на каждый свой отдельный объект. Нафига?
Нарисуйте как вы хотите. Просто сядьте и нарисуйте. Пейнт в руки, смеяться никто не будет ( может быть
). Заодно потренируетесь в разработке дизайна.
«
Последнее редактирование: Апрель 24, 2013, 22:56 от Bepec
»
Записан
dio
Гость
Re: вывод данных ,QScrollArea
«
Ответ #18 :
Апрель 24, 2013, 23:00 »
Попробуйте объединить данные одной строки в столбец и будет вам счастье.
Что касается подгрузки данных, то не зная количества строк - не реализуешь. Если все же хотите ее использовать -зафиксируйте размер столбца в байтах и вычислите количество строк.
Записан
ikar2012
Гость
Re: вывод данных ,QScrollArea
«
Ответ #19 :
Апрель 24, 2013, 23:01 »
Цитата: Bepec от Апрель 24, 2013, 22:54
Конечно делают правильно ) А вы в корне ошибаетесь
Вы пытаетесь вывести массив байт по одному элементу, создавая на каждый свой отдельный объект. Нафига?
Нарисуйте как вы хотите. Просто сядьте и нарисуйте. Пейнт в руки, смеяться никто не будет ( может быть
). Заодно потренируетесь в разработке дизайна.
Не совсем понял что имеется ввиду создавая отдельный объект элемент под каждый элемент? Это как? Я все вывожу в один объект , потомок QWidget, переопределив paintEvent.
И не понял что нарисовать? Как должно выводиться? Так чего там рисовать - это все уже есть и даже как-то работает , просто работает не приемлемо. Но "дизайн" никак не зависит и не поменяется - нужно лишь понять как правильно управлять отрисовкой
«
Последнее редактирование: Апрель 24, 2013, 23:09 от ikar2012
»
Записан
ikar2012
Гость
Re: вывод данных ,QScrollArea
«
Ответ #20 :
Апрель 24, 2013, 23:07 »
Цитата: dio от Апрель 24, 2013, 23:00
Попробуйте объединить данные одной строки в столбец и будет вам счастье.
Что касается подгрузки данных, то не зная количества строк - не реализуешь. Если все же хотите ее использовать -зафиксируйте размер столбца в байтах и вычислите количество строк.
объеденит данные строки в столбец это как? Можно на пальцах.
Как можно зафиксировать размер столбца в описанных условиях и что это даст ( может вы имели ввиду размер строки? -но это тоже не соответсвует условиям) у меня не стоит задачи "притянуть" отображение к таблице - у меня стоит задача отобразится так как надо- т е в виде строк символов ( не важно, отображаемых или нет) с обработкой одного единственного служебного символа - перевод строки ( /n , или он же 0x0a)
Мы точно друг друга понимаем?
Ps в любом случае, всем кто пытается помочь огромное спасибо, но я правда не совсем понимаю что вы предлагаете
Записан
Bepec
Гость
Re: вывод данных ,QScrollArea
«
Ответ #21 :
Апрель 24, 2013, 23:23 »
РИСУЙ что хочешь. РИСУЙ!!!!
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: вывод данных ,QScrollArea
«
Ответ #22 :
Апрель 25, 2013, 06:57 »
Возможно Вы и пройдете весь путь с ScrollArea, определением видимой части и.т.п. Но так будет достигнута только 1 цель: отображение. Понадобится напр выделить параграф - и опять придется сваливаться в низкоуровневую работу. Мне кажется правильно прорываться к TextEdit
Цитата: ikar2012 от Апрель 24, 2013, 21:01
Я хочу "кататься по файлу" но TextEdit не подходит, т к он не может с бинарными данными ( проще говоря он "спотыкается" о 0x00, считая это концом, т к работает со стрингами) можно на лету конечно нули вырезать/заменять, но для данной задачи это не очень походит,
Ну так или иначе нужно решать с невидимыми/неудобными символами. Допустим Вы выводите сами, через DrawText. Что меняется в этом случае?
Записан
alex312
Хакер
Offline
Сообщений: 606
Re: вывод данных ,QScrollArea
«
Ответ #23 :
Апрель 25, 2013, 07:06 »
http://code.google.com/p/qhexedit2/
Записан
ikar2012
Гость
Re: вывод данных ,QScrollArea
«
Ответ #24 :
Апрель 25, 2013, 08:49 »
Цитата: Igors от Апрель 25, 2013, 06:57
Возможно Вы и пройдете весь путь с ScrollArea, определением видимой части и.т.п. Но так будет достигнута только 1 цель: отображение. Понадобится напр выделить параграф - и опять придется сваливаться в низкоуровневую работу. Мне кажется правильно прорываться к TextEdit
Цитата: ikar2012 от Апрель 24, 2013, 21:01
Я хочу "кататься по файлу" но TextEdit не подходит, т к он не может с бинарными данными ( проще говоря он "спотыкается" о 0x00, считая это концом, т к работает со стрингами) можно на лету конечно нули вырезать/заменять, но для данной задачи это не очень походит,
Ну так или иначе нужно решать с невидимыми/неудобными символами. Допустим Вы выводите сами, через DrawText. Что меняется в этом случае?
TextEdit не подходит по описанным причинам. когда рисую я просто делаю пропуск на лету, для подачи же в textedit придется скопировать и модифицировать исходные данные.
Записан
ikar2012
Гость
Re: вывод данных ,QScrollArea
«
Ответ #25 :
Апрель 25, 2013, 08:50 »
Цитата: alex312 от Апрель 25, 2013, 07:06
http://code.google.com/p/qhexedit2/
За ссылку огромное спасибо. именно исходники подобного примера искал!!!!
Записан
ikar2012
Гость
Re: вывод данных ,QScrollArea
«
Ответ #26 :
Апрель 25, 2013, 09:11 »
Командор
, ваш способ работает, по крайней мере на первый взгляд. Еще раз спасибо.
Записан
dio
Гость
Re: вывод данных ,QScrollArea
«
Ответ #27 :
Апрель 25, 2013, 10:51 »
Цитата: ikar2012 от Апрель 24, 2013, 23:07
объеденит данные строки в столбец это как? Можно на пальцах.
Я имел в виду строку - в ячейку таблицы.
По второму вопросу я, всего лишь, предложил способ реализации частичной подгрузки данных, на случай если Вам требуется отображать большие файлы. Представление данных пользователю и работа с данными внутри программы - это разные задачи. Совсем не обязательно обрабатывать данные в том формате, который требуется для конечного представления пользователю.
При загрузки данных - считать, что размер строки фиксирован, а при отображении пользователю - приводить ее к соответствующему виду (например, отображением символа перехода на новую строку, или выделением четных\нечетных строк разным цветом).
Если такой вариант не устраивает, то можно реализовать подгрузку самому. За раз считывать определенное количество строк. На форму добавить кнопку, для загрузки следующей партии.
«
Последнее редактирование: Апрель 25, 2013, 11:12 от dio
»
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: вывод данных ,QScrollArea
«
Ответ #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
Гость
Re: вывод данных ,QScrollArea
«
Ответ #29 :
Апрель 25, 2013, 12:27 »
Цитата: Авварон от Апрель 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 и прочие невидимые штуки, заменив их, скажем, на пробел? После чего тупо скормить текстэдиту.
Модель-вид тут вообще ни причем.
Да спасибо, собственно практически именно так и делаю. 0x00 в итоге естественно заменяется пробелом, если точнее, то ни чем не заменяется просто делается пропуск на длину пробела. Все это на лету при обрисовке. В исходных данных это делать совсем не удобно, т к отображение это всего лишь отображения, и для замены надо делать копию. Поэтому текстэдит не подходит. Иными словами после приведения данных в вид пригодный для текстэдит данные кроме как для отображения ни для чего не годятся. А отображение, как понимаете, не является конечной целью. кроме того цвет подсветки каждого символа тоже рассчитывается динамически и зависит от многих, постоянно меняющихся факторов. Так что пока остановился на ScrollArea. Примеры начал смотреть, возможно что-то новое в них найду
Собственно вопрос был как получить viewport. Ответ получил выше, проверил. работает.
зы за пример отдельное спасибо
«
Последнее редактирование: Апрель 25, 2013, 12:31 от ikar2012
»
Записан
Страниц:
1
[
2
]
3
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...