Название: QPainter, Делегат и зачёркнутый текст. [РЕШЕНО] Отправлено: Bepec от Апрель 17, 2012, 09:53 Приветствую всех знакомых и незнакомых.
Задача: Делегат, выводящий текст разного форматирования. БОльший упор идёт на толщину, выделение цветом, зачёркивание, подчёркивание - стандартный в общем то набор. Вопрос: Как его реализовать? Проблема то в принципе простая - если задавать необходимое форматирование в шрифте, то он применится на весь выводимый текст: 1. Если же попытаться выводить текст по частям, встаёт проблема перерисовки и расчёта шрифтов/отступов/расположения/переноса текста. Что соответственно получается громоздко. жирный косо[/i]й 2. Если использовать виджет (тот же label), то в принципе всё нормально, кроме неодобрительного моего отношения к 20-25 лейблам на экране. (Хотя вроде бы можно создать один в делегате, вбивать в него данные и отрисовывать, но я не уверен) 3. С помощью QTextDocument, который принимает Html и позволяет отрисовывать своё содержимое. Но и тут закавыка. При вызове его ф-ции drawContents(Qpainter*. QRect = QRect()) он рисует себя в верхнем левом углу. Указание же ему Rect'a лишь обрезает его (проще выражаясь совсем не рисует). Как это обойти незнаю - пробую, буду рад совету. 4. неизвестный способ, но он есть ;) PS жду ваших советов/обсуждений. Заранее спасибо. Название: Re: QPainter, Делегат и зачёркнутый текст. Приглашаю к обсуждению. Отправлено: GreatSnake от Апрель 17, 2012, 10:30 3. С помощью QTextDocument, который принимает Html и позволяет отрисовывать своё содержимое. Но и тут закавыка. При вызове его ф-ции drawContents(Qpainter*. QRect = QRect()) он рисует себя в верхнем левом углу. Указание же ему Rect'a лишь обрезает его (проще выражаясь совсем не рисует). Как это обойти незнаю - пробую, буду рад совету. Позиционируй отрисовку текста через QPainter::translate().Название: Re: QPainter, Делегат и зачёркнутый текст. Приглашаю к обсуждению. Отправлено: schmidt от Февраль 05, 2013, 20:01 Добрый вечер, уважаемые,
Реализовал делегат для отображения HTML-контента в QListView, контент отображается прекрасно, за исключением того, что нижняя граница каждого элемента "уезжает" вниз. Понимаю, что проблема в функции sizeHint(), но не знаю, откуда получить "корректную высоту" QTextDocument'а, то есть область, которую занимает отрисованный HTML. Вот код функции sizeHint(): Код: QSize ChatViewItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const { На картинке во вложении можно посмотреть, как выглядит это лишнее пустое пространство в элементах QListView. Подскажите, как вернуть/рассчитать высоту, которую реально занимает отрисованный HTML контент? Название: Re: QPainter, Делегат и зачёркнутый текст. Приглашаю к обсуждению. Отправлено: Bepec от Февраль 05, 2013, 21:51 Говорят в чужих некро темах невежливо задавать свои вопросы :)
1 вопрос = 1 тема. Название: Re: QPainter, Делегат и зачёркнутый текст. Приглашаю к обсуждению. Отправлено: Old от Февраль 05, 2013, 21:57 Подскажите, как вернуть/рассчитать высоту, которую реально занимает отрисованный HTML контент? Смотри на:void QTextDocument::setTextWidth ( qreal width ) QSizeF QTextDocument::size () const Название: Re: QPainter, Делегат и зачёркнутый текст. Приглашаю к обсуждению. Отправлено: Bepec от Февраль 05, 2013, 22:23 Да, кстати, отпишусь о результате начального вопроса темы:
Справился с отрисовкой благодаря совету GreatSnake и небольшого разбирательства с афинными преобразованиями :D Название: Re: QPainter, Делегат и зачёркнутый текст. Приглашаю к обсуждению. Отправлено: m_ax от Февраль 05, 2013, 22:34 Да, кстати, отпишусь о результате начального вопроса темы: Справился с отрисовкой благодаря совету GreatSnake и небольшого разбирательства с афинными преобразованиями :D Можно было проще сделать.. Как то делал подобный крендель.. Название: Re: QPainter, Делегат и зачёркнутый текст. Приглашаю к обсуждению. Отправлено: schmidt от Февраль 06, 2013, 09:57 Цитировать Говорят в чужих некро темах невежливо задавать свои вопросы Понял, учту :) Смотри на: void QTextDocument::setTextWidth ( qreal width ) QSizeF QTextDocument::size () const Именно эти функции и использую в вышеприведенном коде. Померил размеры областей в пикселах, понял, что дело не в size(),height(). Где-то неправильно определяю границы области для элементов QListView, P.S. В любом случае в эту тему больше не пишу, дабы проявить уважение к участникам оригинальной темы :) Название: Re: QPainter, Делегат и зачёркнутый текст. Приглашаю к обсуждению. Отправлено: Bepec от Февраль 06, 2013, 09:59 Старые темы надо закрывать, что я в принципе и сделаю. Спасибо всем за помощь.
|