Чат с графическим отображением |
Здравствуйте, гость ( Вход | Регистрация )
Чат с графическим отображением |
lucifer_vrn |
27.2.2009, 23:37
Сообщение
#1
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: 0 |
здравствуйте. не давно начал писать в кьюте.
стоит задача написать графическую часть чата, т.е. окно отображение постов. ТЗ примерно такое. - сообщения чата должны отображаться в облачках. что понимается под облачками см. тут - http://www.apple-iphone.ru/photos6/sms.jpg. т.е. вокруг каждого поста красивая обводка с градиентной заливкой. - текст сообщения можно выделять чтобы скопировать в буфер обмена.(текст может быть и отрендерен, а элемент тогда должен быть выделяемый с контекстным меню) - окно чата можно мастштабировать(т.е. сайзить) - количество сообщений в окне с полосой прокрутки - не лимитированно, пока память не кончиться, да и чтоб проц не хавало. уже два дня ломаю мозг как это сделать. главная в том, что когда изменяю размер окна(сжимаю в ширину), высота текста, одного поста увеличвается(текст переноситься но новую строку) и когда это происходит я никак не могу сделать чтоб по человеский все отображалось. пробовал два варианта. клал на виджет - QGraphicsView, в него вгонял QGraphicScene, на него класс QGraphicItem. Каждый итем - один пост чата. Получилась фигня. Каждый элемент имеет свою координату, один пост под другим, когда сжимаю виджет по ширине - получается, что текст увеличивает высоту и одно облочко с текстом накладывается на другое. вариант номер два: model - view - delegate. создаю делегата, который по вызову paint отрисовывает текст и облачко и отображает в QListView. Проблемы опять лезут: я правильно обрабатываю sizeHint(это я вижу за счет того что для пробы делаю fillRect на option.rect который передается в paint), но размер самого итема в QListView при этом не изменяется, т.е. если текст уменьшается по высоте(за счет увеличиния его ширины) между постами образуются белые пятна..... вообщем сложно описать такую проблему. поэтому сформулирую конкретный вопрос: смотря на рисунок http://www.apple-iphone.ru/photos6/sms.jpg как бы вы реализовали такой чат в Qt с требованиями которые я выше озвучил???? |
|
|
trdm |
28.2.2009, 0:23
Сообщение
#2
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
Пиши свой виджет, это несложно...
в Qt вообще мало сложного, но много полезного. У тебя еще задачка попроще моей... http://www.forum.crossplatform.ru/index.ph...c=1169&st=0 полазь в сорцах, там много для твоей задачи найти можно: расчет позиции, отрисовка, скролинг, переносы строк и т.п. Сообщение отредактировал trdm - 28.2.2009, 0:35 |
|
|
kwisp |
28.2.2009, 0:26
Сообщение
#3
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
клал на виджет - QGraphicsView, в него вгонял QGraphicScene, на него класс QGraphicItem. Каждый итем - один пост чата. Получилась фигня. Каждый элемент имеет свою координату, один пост под другим, когда сжимаю виджет по ширине - получается, что текст увеличивает высоту и одно облочко с текстом накладывается на другое. а как у тебя размещаются итемы QGraphicsLayout ??? вообщем сложно описать такую проблему. поэтому сформулирую конкретный вопрос: смотря на рисунок http://www.apple-iphone.ru/photos6/sms.jpg как бы вы реализовали такой чат в Qt с требованиями которые я выше озвучил???? я бы покопал в область svg изображений и QTextBrowser .... как то мне не по душе графСцена для решения такой задачи... примеры в Qt полезные очень много интересного можно высмотреть. |
|
|
ViGOur |
28.2.2009, 1:42
Сообщение
#4
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
я бы покопал в область svg изображений А я бы покопал в сторону Таблицы стилей Qt. Да и пользователи смогут сами рисовать и настраивать скины для чата.
|
|
|
lucifer_vrn |
28.2.2009, 10:12
Сообщение
#5
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: 0 |
Пиши свой виджет, это несложно... не пойдёт. если каждое сообещение я буду держать в отдельном виджете, за неделю допустим их может набраться миллион и капец памяти и процу. в Qt вообще мало сложного, но много полезного. +1 а как у тебя размещаются итемы QGraphicsLayout ??? item->setPos; QGraphicScene->addItem.... кстати попробую капнуть в сторону QGraphicsLayout А я бы покопал в сторону Таблицы стилей Qt. а чем стильл сможет помочь? он ведь накладывается внешний вид на виджеты, а мне нужно чтоб один виджет похитрому и с отрисовкой отображал
|
|
|
kwisp |
28.2.2009, 11:36
Сообщение
#6
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
А я бы покопал в сторону Таблицы стилей Qt. Да и пользователи смогут сами рисовать и настраивать скины для чата. тоже вариант но как я понял основная задача это хранить все эти сообщения в памяти, т.е. с виджетами либо не получиться либо получиться что нужно показывать всего несколько остальные все равно в памяти либо информация о них в памяти, но тогда чтобы создать и показать нудно время получается мягкого скрола по сообщениям не будет(может и ошибаюсь если что поправьте) а графСцена как известно милионы показывает без проблем. но все равно думаю что для неё очень простая задача. первый вариант можно с ней попробовать.... |
|
|
trdm |
28.2.2009, 11:56
Сообщение
#7
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
Пиши свой виджет, это несложно... не пойдёт. если каждое сообещение я буду держать в отдельном виджете, за неделю допустим их может набраться миллион и капец памяти и процу. не "сообщение"="виджет", а вот это виджет: Элементы самостоятельно отрисовывай. |
|
|
kwisp |
28.2.2009, 12:05
Сообщение
#8
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
"сообщение"="виджет", а вот это виджет: Элементы самостоятельно отрисовывай. если это будет отдельный самостоятельный виджет их же все равно может быть милион. моежт всю ленту сообщений сделать виджетом и дорисовывать в него по приходу нового сообщения.??? тогда вопрос в максимальном размере виджета в системе. |
|
|
trdm |
28.2.2009, 12:41
Сообщение
#9
|
Дмитрий Трошин Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: 6 |
|
|
|
lucifer_vrn |
1.3.2009, 16:52
Сообщение
#10
|
Студент Группа: Участник Сообщений: 19 Регистрация: 27.2.2009 Пользователь №: 580 Спасибо сказали: 3 раз(а) Репутация: 0 |
отрисовать всю ленту не проблема. проблема возникает при перерисовке сообщений, когда допустим меняется ширина виджета, текст тогда должен переноситься на новую строку во многих постах, что приводит к лавиному пересчету координат и перерисове всего...
|
|
|
Текстовая версия | Сейчас: 22.12.2024, 4:16 |