Работа с QColor в Qt: основы и примеры

Автор: | 15 июня, 2025

В библиотеке Qt класс QColor предназначен для представления и управления цветами. Он поддерживает различные цветовые модели, включая RGB, HSV и CMYK, а также предоставляет множество методов для преобразования и получения информации о цветах. В этой статье мы рассмотрим основы работы с QColor, приведем примеры использования и обсудим типичные сценарии применения.


Что такое QColor?

QColor — это класс из модуля QtGui, представляющий цвет с возможностью управления прозрачностью (альфа-каналом) и преобразования между различными цветовыми моделями. С ним можно работать как с предопределенными цветами (например, "red", "blue") так и с пользовательскими значениями RGB, HSV и т.д.


Создание экземпляров QColor

Создавать цвета можно несколькими способами:

QColor color1(Qt::red);                      // Через перечисление Qt
QColor color2("blue");                       // По имени цвета
QColor color3(255, 0, 0);                    // RGB
QColor color4(255, 0, 0, 128);               // RGB + альфа
QColor color5 = QColor::fromRgbF(0.5, 0, 0); // RGB в формате float

Получение компонент цвета

QColor color(100, 150, 200, 255);
int r = color.red();     // 100
int g = color.green();   // 150
int b = color.blue();    // 200
int a = color.alpha();   // 255

// Также есть методы для установки:

color.setRed(120);
color.setAlpha(180);

Поддержка других цветовых моделей

Qt поддерживает не только RGB, но и HSV/HSB (оттенок, насыщенность, яркость) и CMYK:

QColor color = QColor::fromHsv(180, 255, 255); // яркий циан
int h = color.hue();     // 180
int s = color.saturation();
int v = color.value();

// Преобразование:

int c, m, y, k;
color.getCmyk(&c, &m, &y, &k);

Проверка допустимости цвета

QColor color("invalid_color");
if (!color.isValid()) {
    qDebug() << "Цвет недопустим";
}

Использование с виджетами

QPalette palette;
palette.setColor(QPalette::Window, QColor("#87CEFA")); // light sky blue
someWidget->setPalette(palette);
someWidget->setAutoFillBackground(true);

Преобразование в строку и обратно

QColor color(Qt::green);
QString hex = color.name();  // "#00ff00"
QColor fromHex(hex);         // снова зеленый

QColorDialog — выбор цвета пользователем

Qt предоставляет диалоговое окно для выбора цвета:

QColor color = QColorDialog::getColor(Qt::yellow, this, "Выберите цвет");
if (color.isValid()) {
    qDebug() << "Выбран цвет:" << color.name();
}

Применение в стиле (CSS) Qt

Цвета можно задавать в стиле через setStyleSheet:

button->setStyleSheet("background-color: #FF4500; color: white;");

Заключение

Класс QColor — мощный и гибкий инструмент для работы с цветами в Qt. Он позволяет задавать цвета в различных форматах, преобразовывать между цветовыми моделями, проверять допустимость значений и легко интегрируется с другими компонентами Qt, такими как виджеты, палитры и диалоги.

Используя QColor, вы получаете полный контроль над визуальной частью вашего приложения.