Изменение цвета фона окна

Чтобы изменить цвет фона окна (или компонента) следует установить палитру с настроенной ролью Window. Цветовая палитра содержит цвета для каждой роли и состояния компонента. Указать состояние компонента позволяют следующие константы из класса QPalette:

  • Active и Normal — компонент активен (окно находится в фокусе ввода);
  • Disabled — компонент недоступен;
  • Inactive — компонент неактивен (окно находится вне фокуса ввода).

Получить текущую палитру компонента позволяет метод palette(). Прототип метода:

const QPalette &palette() const

Чтобы изменить цвет для какой-либо роли и состояния следует воспользоваться методом setColor() из класса QPalette. Прототипы метода:

#include <QPalette>
void setColor(QPalette::ColorRole role, const QColor &color)
void setColor(QPalette::ColorGroup group, QPalette::ColorRole role,
              const QColor &color)

В параметре role указывается для какого элемента изменяется цвет. Например, константа Window изменяет цвет фона, а WindowText — цвет текста. Полный список констант смотрите в документации по классу QPalette.

В параметре color указывается цвет элемента. В качестве значения можно указать константы (например, Qt::black, Qt::red и т. д.) или экземпляр класса QColor (например, QColor("red"), QColor(255, 0, 0) и др.).

После настройки палитры необходимо вызвать метод setPalette() и передать ему измененный объект палитры. Прототип метода:

void setPalette(const QPalette &)

Следует помнить, что компоненты-потомки по умолчанию имеют прозрачный фон и не перерисовываются автоматически. Чтобы включить перерисовку необходимо передать значение true методу setAutoFillBackground(). Прототип метода:

void setAutoFillBackground(bool enabled)

Изменить цвет фона можно также с помощью CSS-атрибута background-color. Для этого следует передать таблицу стилей в метод setStyleSheet(). Прототип метода:

void setStyleSheet(const QString &styleSheet)

Таблицы стилей могут быть внешними (подключение через командную строку), установленными на уровне приложения (с помощью метода setStyleSheet() из класса QApplication) или установленными на уровне компонента (с помощью метода setStyleSheet() из класса QWidget). Атрибуты, установленные последними, обычно перекрывают значения аналогичных атрибутов, указанных ранее. Если вы занимались Web-программированием, то CSS вам уже знаком, а если нет, то придется дополнительно изучить HTML и CSS.

Создадим окно с надписью. Для активного окна установим зеленый цвет, а для неактивного — красный. Цвет фона надписи сделаем белым. Для изменения фона окна будем устанавливать палитру, а для изменения цвета фона надписи — CSS-атрибут background-color (листинг 3.10).

Листинг 3.10. Изменение цвета фона окна

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QPalette>
#include <QColor>

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   QWidget window;
   window.setWindowTitle("Изменение цвета фона окна");
   window.resize(350, 70);
   QPalette pal = window.palette();
   pal.setColor(QPalette::Normal, QPalette::Window,
                QColor(0, 128, 0));
   pal.setColor(QPalette::Inactive, QPalette::Window,
                QColor(255, 0, 0));
   window.setPalette(pal);

   QLabel *label = new QLabel("Текст надписи");
   label->setAlignment(Qt::AlignCenter);
   label->setStyleSheet("background-color: #ffffff;");
   label->setAutoFillBackground(true);
   QVBoxLayout *vbox = new QVBoxLayout;
   vbox->addWidget(label);
   window.setLayout(vbox);

   window.show();
   return app.exec();
}

Учебник C++ (Qt Creator и MinGW)
Учебник C++ (Qt Creator и MinGW) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов