crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Чат с графическим отображением
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  


Цитата(lucifer_vrn @ 27.2.2009, 23:37) *
клал на виджет - QGraphicsView, в него вгонял QGraphicScene, на него класс QGraphicItem. Каждый итем - один пост чата. Получилась фигня. Каждый элемент имеет свою координату, один пост под другим, когда сжимаю виджет по ширине - получается, что текст увеличивает высоту и одно облочко с текстом накладывается на другое.

а как у тебя размещаются итемы
QGraphicsLayout ???

Цитата(lucifer_vrn @ 27.2.2009, 23:37) *
вообщем сложно описать такую проблему. поэтому сформулирую конкретный вопрос: смотря на рисунок 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  


Цитата(kwisp @ 28.2.2009, 0:26) *
я бы покопал в область svg изображений
А я бы покопал в сторону Таблицы стилей Qt. Да и пользователи смогут сами рисовать и настраивать скины для чата. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lucifer_vrn
  опции профиля:
сообщение 28.2.2009, 10:12
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 27.2.2009
Пользователь №: 580

Спасибо сказали: 3 раз(а)




Репутация:   0  


Цитата(trdm @ 28.2.2009, 0:23) *
Пиши свой виджет, это несложно...

не пойдёт. если каждое сообещение я буду держать в отдельном виджете, за неделю допустим их может набраться миллион и капец памяти и процу.
Цитата(trdm @ 28.2.2009, 0:23) *
в Qt вообще мало сложного, но много полезного.

+1
Цитата(kwisp @ 28.2.2009, 0:26) *
а как у тебя размещаются итемы
QGraphicsLayout ???

item->setPos; QGraphicScene->addItem.... кстати попробую капнуть в сторону QGraphicsLayout

Цитата(ViGOur @ 28.2.2009, 1:42) *
А я бы покопал в сторону Таблицы стилей Qt.
а чем стильл сможет помочь? он ведь накладывается внешний вид на виджеты, а мне нужно чтоб один виджет похитрому и с отрисовкой отображал
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 28.2.2009, 11:36
Сообщение #6


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(ViGOur @ 28.2.2009, 1:42) *
А я бы покопал в сторону Таблицы стилей Qt. Да и пользователи смогут сами рисовать и настраивать скины для чата. :)

тоже вариант но как я понял основная задача это хранить все эти сообщения в памяти, т.е. с виджетами либо не получиться либо получиться что нужно показывать всего несколько остальные все равно в памяти либо информация о них в памяти, но тогда чтобы создать и показать нудно время получается мягкого скрола по сообщениям не будет(может и ошибаюсь если что поправьте)

а графСцена как известно милионы показывает без проблем.
но все равно думаю что для неё очень простая задача. первый вариант можно с ней попробовать....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 28.2.2009, 11:56
Сообщение #7


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(lucifer_vrn @ 28.2.2009, 10:12) *
Цитата(trdm @ 28.2.2009, 0:23) *
Пиши свой виджет, это несложно...

не пойдёт. если каждое сообещение я буду держать в отдельном виджете, за неделю допустим их может набраться миллион и капец памяти и процу.

не "сообщение"="виджет", а вот это виджет:
Элементы самостоятельно отрисовывай.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 28.2.2009, 12:05
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(trdm @ 28.2.2009, 11:56) *
"сообщение"="виджет", а вот это виджет:
Элементы самостоятельно отрисовывай.


если это будет отдельный самостоятельный виджет их же все равно может быть милион. моежт всю ленту сообщений сделать виджетом и дорисовывать в него по приходу нового сообщения.??? тогда вопрос в максимальном размере виджета в системе.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
trdm
  опции профиля:
сообщение 28.2.2009, 12:41
Сообщение #9


Дмитрий Трошин
****

Группа: Участник
Сообщений: 575
Регистрация: 12.1.2008
Пользователь №: 68

Спасибо сказали: 21 раз(а)




Репутация:   6  


Цитата(kwisp @ 28.2.2009, 12:05) *
Цитата(trdm @ 28.2.2009, 11:56) *
"сообщение"="виджет", а вот это виджет:
Элементы самостоятельно отрисовывай.


.....моежт всю ленту сообщений сделать виджетом......

я это и имел ввиду. т.е. всю ленту сообщений.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
lucifer_vrn
  опции профиля:
сообщение 1.3.2009, 16:52
Сообщение #10


Студент
*

Группа: Участник
Сообщений: 19
Регистрация: 27.2.2009
Пользователь №: 580

Спасибо сказали: 3 раз(а)




Репутация:   0  


отрисовать всю ленту не проблема. проблема возникает при перерисовке сообщений, когда допустим меняется ширина виджета, текст тогда должен переноситься на новую строку во многих постах, что приводит к лавиному пересчету координат и перерисове всего...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


5 чел. читают эту тему (гостей: 5, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 23:56