На этом шаге рассмотрим цветовую палитру элементов управления.
Цветовая палитра элементов управления — это таблица, в которой содержатся цвета, используемые виджетом при отображении на экране. Дело в том, что цвета виджетов не определены окончательно и в любой момент могут быть изменены передачей соответствующего цвета текста, цвета фона и т. д.
Каждый из виджетов содержит в себе объект палитры, доступ к которому можно получить с помощью метода palette() класса QWidget. Сама палитра — это класс QPalette, который состоит из трех основных групп объектов, показанных на рис. 1.
Рис.1. Схема цветовой палитры виджета
Эти группы определяют три возможных состояния виджета: активное (Active), неактивное (Inactive) и недоступное (Disabled). Каждая из этих групп состоит из различных цветовых ролей (color roles), описание которых приведено в табл. 1. Каждая роль имеет кисть (QBrush) и цвет (QColor).
Класс QPalette использует механизм неявных общих данных, а это означает, что все виджеты используют ссылку на один и тот же объект палитры. Если палитра виджета подвергается изменению, виджет получает свой собственный объект данных палитры.
Таблица 1. Цветовые перечисления ColorRole класса QPalette
Флаг | Описание |
---|---|
WindowText | Цвет, который используется по умолчанию для рисования пером. Этот цвет находится на переднем плане. По умолчанию это черный цвет |
Text | Цвет текста. По умолчанию — черный |
BrightText | Яркий цвет текста, отличающийся от цвета WindowText. Обычно совпадает с Text. По умолчанию — черный |
ButtonText | Цвет текста для надписей на кнопках. По умолчанию — черный |
Highlight | Цвет фона выделения элементов. По умолчанию — темно-голубой |
HighlightedText | Цвет текста выделенных элементов. Представляет собой контраст к цвету, заданному значением Hightlight. По умолчанию — белый |
Window | Основной цвет фона. По умолчанию — светло-серый цвет |
Base | Цвет для заднего фона виджета. По умолчанию — белый или другой цвет светлого оттенка |
Button | Цвет кнопки, как правило, одного цвета с фоном. По умолчанию — светло-серый |
Link | Цвет, используемый для непосещенной гипертекстовой ссылки. По умолчанию — голубой |
LinkVisited | Цвет, используемый для обозначения посещенной гипертекстовой ссылки. По умолчанию — розовый |
Light | Цвет эффекта объемности. Должен быть светлее цвета заданного значением Button. По умолчанию — белый |
Midlight | Цвет эффекта объемности. По умолчанию — светло-серый |
Dark | Цвет эффекта объемности. Должен быть темнее цвета заданного значением Button. По умолчанию — темно-серый |
Mid | Цвет эффекта объемности. По умолчанию — средне-серый |
Shadow | Цвет эффекта объемности. По умолчанию — черный |
На рис. 2 показано, каким областям виджета счетчика соответствуют некоторые из значений, приведенных в табл. 1.
Рис.2. Некоторые элементы палитры виджета счетчика
Пример изменения палитры приведен в листинге программы, результат работы которй показан на рис. 3.
//создается объект палитры pal //объекту палитры присваивается значение палитры виджета счетчика, //которое извлекается вызовом метода palette() QPalette pal = spb.palette(); //объект палитры подвергается изменениям с помощью метода setBrush() //и серии вызовов метода setColor() pal.setBrush(QPalette::Button, QBrush(Qt::red, Qt::Dense3Pattern)); pal.setColor(QPalette::ButtonText, Qt::blue); pal.setColor(QPalette::Text, Qt::magenta); //значение роли цвета QPalette::Base предназначено только для активного состояния pal.setColor(QPalette::Active, QPalette::Base, Qt::green); //полученная палитра устанавливается в виджет методом setPalette() spb.setPalette(pal); spb.resize(50, 50); spb.show(); //применяем стиль Windows для того, чтобы наш виджет не использовал //стиль платформы и выглядел везде одинаково app.setStyle(QStyleFactory::create("windows"));
Рис.3. Приложение, демонстрирующее измененную палитру виджета
Файлы приложения можно взять Предыдущий шаг
Содержание
Следующий шаг