Russian Qt Forum

Qt => Общие вопросы => Тема начата: andrew.k от Июль 11, 2012, 21:54



Название: [Решено] QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 11, 2012, 21:54
QTextEdit редактор текста.
Есть контрол, который задает цвет текста и фон.
Во время навигации по тексту необходимо в котроле отображать текущие цвета символов под курсором.
С этим проблем нет.

Теперь суть проблемы.
У приложения заданы собственные стили. Поэтому цвет текста изначально серый и без фона.
но при этом QTextCharFormat для текущего символа возвращает черный цвет, даже для цвета фона (QTextCharFormat::background().color())

Что за дела? Кто сталкивался?


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 11, 2012, 22:19
выглядит как баг qt.

UPD: вот откуда берутся баги в qt :)


Название: Re: QTextEdit цвет текущего символа
Отправлено: Bepec от Июль 12, 2012, 07:01
А ты не html, а plainText пользуешь?

По идее правильно работает. Фон у символов изначально берётся из палитры QTextEdit. Там даж роли специальные для текста.

Как вариант сам понимаешь - всего лишь начальные цвета задаются цветами палитры. Если отличный от этого стиля, значит уже раскрашенный.

PS ну а фон - по умолчанию он transparent, так что всё хоккей, а не баг.


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 09:43
А ты не html, а plainText пользуешь?
какой же плейн текст, если речь о цвете?  ???

По идее правильно работает. Фон у символов изначально берётся из палитры QTextEdit. Там даж роли специальные для текста.
Мне не важна палитра QTextEdit, т.к. я работаю с документом (QTextDocument), а текстЕдит его всего ли отображает.
Он же определяет каким-то образом, что для символа цвет не задан и надо его отрисовать цветом стиля.
Не правильно работает!

Как вариант сам понимаешь - всего лишь начальные цвета задаются цветами палитры. Если отличный от этого стиля, значит уже раскрашенный.

PS ну а фон - по умолчанию он transparent, так что всё хоккей, а не баг.
Не знаю, что делать с этой частью информации. Она бесполезна вроде.


Название: Re: QTextEdit цвет текущего символа
Отправлено: Bepec от Июль 12, 2012, 09:50
Эх как бы сказать.
Цвет у тебя у символа не задан в начале. Фон не задан. Значит берётся эта информация из палитры того компонента, который его отображает.
Если ты этот же текст сунешь в TextEdit с синим фоном - он будет с синим фоном, если не задано иное.
Если в TextEdit будет установлен базовый цвет текста как розовый - он его отобразит розовым.
Ты правильно сказал - ты работаешь с документом (информацией), а textEdit его отображает в соответствии со своей палитрой, вот и всё.

Простейшее model-View. Если в View установлен серый, будет показываться серым, если в model не указано иное.


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 10:16
Эх как бы сказать.
Цвет у тебя у символа не задан в начале. Фон не задан. Значит берётся эта информация из палитры того компонента, который его отображает.
Если ты этот же текст сунешь в TextEdit с синим фоном - он будет с синим фоном, если не задано иное.
Если в TextEdit будет установлен базовый цвет текста как розовый - он его отобразит розовым.
Ты правильно сказал - ты работаешь с документом (информацией), а textEdit его отображает в соответствии со своей палитрой, вот и всё.
Это ясно как божий день. Зачем ты мне это объясняешь?

Простейшее model-View. Если в View установлен серый, будет показываться серым, если в model не указано иное.
Если продолжать твою аналогию (может тебе так проще будет), то почему model мне сообщает, что цвет у нее черный, хотя он не задан.
Вид с боку: каким образом view определяет, что цвет не черный, а не задан..


Название: Re: QTextEdit цвет текущего символа
Отправлено: Bepec от Июль 12, 2012, 10:24
100% гарантировать не могу, но кажется там механика аля:

Чёрный цвет, прозрачный фон = стандарт.
Несовпадение в этом шаблоне и уже отрисовка идёт принудительно из модели уже нужным цветом.

PS в исходниках проще посмотреть в принципе :)


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 10:54
100% гарантировать не могу, но кажется там механика аля:

Чёрный цвет, прозрачный фон = стандарт.
Несовпадение в этом шаблоне и уже отрисовка идёт принудительно из модели уже нужным цветом.
Все гадаешь на кофейной гуще?

Я сделал документ, в котором для части текста задан черный цвет, а для части цвет не задан вообще.
Таким образом, при загрузке этого документа, часть текста отображается цветом стиля, а часть заданным черным.
Фона в обоих случаях нет.

Вывод: значит есть два состояния, "цвет задан" и "цвет не задан". То же самое справедливо и для фона.
Следствие из вывода: твоя "теория" не работает. могу 100% гарантировать.

Еще раз вопрос задачи: как различать эти состояния? как это делает QTextEdit?


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 10:57
По-моему разумению, если цвет не задан, должен возвращаться невалидный QColor().
Но этого не происходит и я получаю валидный черный.


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 11:19
PS в исходниках проще посмотреть в принципе :)
А посмотреть в исходниках, в данном случае, не так легко, как тебе написать эту строчку.


Название: Re: QTextEdit цвет текущего символа
Отправлено: Bepec от Июль 12, 2012, 12:05
Логично, что изменения фиксируются. document для того и предназначен :)

Мне лично это не очень интересно, потому в исходники не полезу.

PS никто не говорил, что будет легко, но это реально проще, чем гадать :D


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 13:02
Логично, что изменения фиксируются. document для того и предназначен :)
Какие изменения? Где фиксируются? Что логичного в том, что серый возвращается как черный?

Мне лично это не очень интересно, потому в исходники не полезу.

PS никто не говорил, что будет легко, но это реально проще, чем гадать :D
Пока что только ты гадаешь.
Мой вопрос предназначался тем, кто разбирается в вопросе.


Название: Re: QTextEdit цвет текущего символа
Отправлено: Igors от Июль 12, 2012, 13:18
А какая альфа у возвращаемого цвета? Если 255 - выкладывайте минимальный проект, будем разбираться


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 14:39
А какая альфа у возвращаемого цвета? Если 255 - выкладывайте минимальный проект, будем разбираться
Пояснения вроде не нужны.
Проект во вложении.


Название: Re: QTextEdit цвет текущего символа
Отправлено: Igors от Июль 12, 2012, 17:49
Код
C++ (Qt)
void MainWidget::currentCharFormatChanged(const QTextCharFormat &format)
{
QColor color;
QBrush brush = format.foreground();
if (brush != Qt::NoBrush)
color = brush.color();
else
               color = // берете цвет из styleSheet
 


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 18:03
Вот решение:
info = format.hasProperty(QTextFormat::ForegroundBrush) ? "Valid Color" : "Invalid Color";


Название: Re: QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 18:07
Код
C++ (Qt)
void MainWidget::currentCharFormatChanged(const QTextCharFormat &format)
{
QColor color;
QBrush brush = format.foreground();
if (brush != Qt::NoBrush)
color = brush.color();
else
               color = // берете цвет из styleSheet
 
Это тоже работает. Спасибо.


Название: Re: [Решено] QTextEdit цвет текущего символа
Отправлено: andrew.k от Июль 12, 2012, 18:13
А нужно было всего-то внимательно ознакомиться с документацией по QBrush :)
А я зациклился на цвете.