Russian Qt Forum
Ноябрь 23, 2024, 17:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: [Решено] QTextEdit цвет текущего символа  (Прочитано 8587 раз)
andrew.k
Гость
« : Июль 11, 2012, 21:54 »

QTextEdit редактор текста.
Есть контрол, который задает цвет текста и фон.
Во время навигации по тексту необходимо в котроле отображать текущие цвета символов под курсором.
С этим проблем нет.

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

Что за дела? Кто сталкивался?
« Последнее редактирование: Июль 18, 2012, 11:52 от andrew.k » Записан
andrew.k
Гость
« Ответ #1 : Июль 11, 2012, 22:19 »

выглядит как баг qt.

UPD: вот откуда берутся баги в qt Улыбающийся
« Последнее редактирование: Июль 12, 2012, 18:08 от andrew.k » Записан
Bepec
Гость
« Ответ #2 : Июль 12, 2012, 07:01 »

А ты не html, а plainText пользуешь?

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

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

PS ну а фон - по умолчанию он transparent, так что всё хоккей, а не баг.
Записан
andrew.k
Гость
« Ответ #3 : Июль 12, 2012, 09:43 »

А ты не html, а plainText пользуешь?
какой же плейн текст, если речь о цвете?  Непонимающий

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

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

PS ну а фон - по умолчанию он transparent, так что всё хоккей, а не баг.
Не знаю, что делать с этой частью информации. Она бесполезна вроде.
Записан
Bepec
Гость
« Ответ #4 : Июль 12, 2012, 09:50 »

Эх как бы сказать.
Цвет у тебя у символа не задан в начале. Фон не задан. Значит берётся эта информация из палитры того компонента, который его отображает.
Если ты этот же текст сунешь в TextEdit с синим фоном - он будет с синим фоном, если не задано иное.
Если в TextEdit будет установлен базовый цвет текста как розовый - он его отобразит розовым.
Ты правильно сказал - ты работаешь с документом (информацией), а textEdit его отображает в соответствии со своей палитрой, вот и всё.

Простейшее model-View. Если в View установлен серый, будет показываться серым, если в model не указано иное.
Записан
andrew.k
Гость
« Ответ #5 : Июль 12, 2012, 10:16 »

Эх как бы сказать.
Цвет у тебя у символа не задан в начале. Фон не задан. Значит берётся эта информация из палитры того компонента, который его отображает.
Если ты этот же текст сунешь в TextEdit с синим фоном - он будет с синим фоном, если не задано иное.
Если в TextEdit будет установлен базовый цвет текста как розовый - он его отобразит розовым.
Ты правильно сказал - ты работаешь с документом (информацией), а textEdit его отображает в соответствии со своей палитрой, вот и всё.
Это ясно как божий день. Зачем ты мне это объясняешь?

Простейшее model-View. Если в View установлен серый, будет показываться серым, если в model не указано иное.
Если продолжать твою аналогию (может тебе так проще будет), то почему model мне сообщает, что цвет у нее черный, хотя он не задан.
Вид с боку: каким образом view определяет, что цвет не черный, а не задан..
Записан
Bepec
Гость
« Ответ #6 : Июль 12, 2012, 10:24 »

100% гарантировать не могу, но кажется там механика аля:

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

PS в исходниках проще посмотреть в принципе Улыбающийся
Записан
andrew.k
Гость
« Ответ #7 : Июль 12, 2012, 10:54 »

100% гарантировать не могу, но кажется там механика аля:

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

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

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

Еще раз вопрос задачи: как различать эти состояния? как это делает QTextEdit?
Записан
andrew.k
Гость
« Ответ #8 : Июль 12, 2012, 10:57 »

По-моему разумению, если цвет не задан, должен возвращаться невалидный QColor().
Но этого не происходит и я получаю валидный черный.
Записан
andrew.k
Гость
« Ответ #9 : Июль 12, 2012, 11:19 »

PS в исходниках проще посмотреть в принципе Улыбающийся
А посмотреть в исходниках, в данном случае, не так легко, как тебе написать эту строчку.
Записан
Bepec
Гость
« Ответ #10 : Июль 12, 2012, 12:05 »

Логично, что изменения фиксируются. document для того и предназначен Улыбающийся

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

PS никто не говорил, что будет легко, но это реально проще, чем гадать Веселый
« Последнее редактирование: Июль 12, 2012, 12:13 от Bepec » Записан
andrew.k
Гость
« Ответ #11 : Июль 12, 2012, 13:02 »

Логично, что изменения фиксируются. document для того и предназначен Улыбающийся
Какие изменения? Где фиксируются? Что логичного в том, что серый возвращается как черный?

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

PS никто не говорил, что будет легко, но это реально проще, чем гадать Веселый
Пока что только ты гадаешь.
Мой вопрос предназначался тем, кто разбирается в вопросе.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #12 : Июль 12, 2012, 13:18 »

А какая альфа у возвращаемого цвета? Если 255 - выкладывайте минимальный проект, будем разбираться
Записан
andrew.k
Гость
« Ответ #13 : Июль 12, 2012, 14:39 »

А какая альфа у возвращаемого цвета? Если 255 - выкладывайте минимальный проект, будем разбираться
Пояснения вроде не нужны.
Проект во вложении.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Июль 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
 
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.078 секунд. Запросов: 23.