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