Использование изображения в качестве фона

В качестве фона окна (или компонента) можно использовать изображение. Для этого необходимо получить текущую палитру компонента с помощью метода palette(), а затем вызвать метод setBrush() из класса QPalette. Прототипы метода:

void setBrush(QPalette::ColorRole role, const QBrush &brush)
void setBrush(QPalette::ColorGroup group, QPalette::ColorRole role,
              const QBrush &brush)

Параметры group и role аналогичны соответствующим параметрам в методе setColor(), который мы рассматривали в предыдущем разделе. В параметре brush указывается экземпляр класса QBrush. Прототипы конструктора класса:

#include <QBrush>
QBrush()
QBrush(Qt::BrushStyle style)
QBrush(Qt::GlobalColor color, Qt::BrushStyle style = Qt::SolidPattern)
QBrush(const QColor &color, Qt::BrushStyle style = Qt::SolidPattern)
QBrush(Qt::GlobalColor color, const QPixmap &pixmap)
QBrush(const QColor &color, const QPixmap &pixmap)
QBrush(const QPixmap &pixmap)
QBrush(const QImage &image)
QBrush(const QGradient &gradient)
QBrush(const QBrush &other)

В параметре style указываются константы, задающие стиль кисти, например, Qt::NoBrush, Qt::SolidPattern, Qt::Dense1Pattern, Qt::Dense2Pattern, Qt::Dense3Pattern, Qt::Dense4Pattern, Qt::Dense5Pattern, Qt::Dense6Pattern, Qt::Dense7Pattern, Qt::CrossPattern и др. С помощью этого параметра можно сделать цвет сплошным (Qt::SolidPattern) или имеющим текстуру (например, константа Qt::CrossPattern задает текстуру в виде сетки).

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

QPalette pal = window.palette();
pal.setBrush(QPalette::Normal, QPalette::Window,
             QBrush(QColor(0, 128, 0), Qt::SolidPattern));
window.setPalette(pal);

Параметры pixmap и image позволяют передать объекты изображений. Конструкторы этих классов принимают путь к файлу, который может быть как абсолютным, так и относительным. Основные прототипы конструкторов:

QPixmap(const QString &fileName, const char *format = nullptr,
        Qt::ImageConversionFlags flags = Qt::AutoColor)
QImage(const QString &fileName, const char *format = nullptr)

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

Указать, что изображение используется в качестве фона, можно также с помощью CSS-атрибутов background и background-image. С помощью CSS-атрибута background-repeat можно дополнительно указать режим повтора фонового рисунка. Он может принимать значения repeat, repeat-x (повтор только по горизонтали), repeat-y (повтор только по вертикали) и no-repeat (не повторяется).

Создадим окно с надписью. Для активного окна установим одно изображение (с помощью изменения палитры), а для надписи другое изображение (с помощью CSS-атрибута background-image) (листинг 3.11).

Листинг 3.11. Использование изображения в качестве фона

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QVBoxLayout>
#include <QPalette>
#include <QPixmap>
#include <QBrush>

int main(int argc, char *argv[])
{
   QApplication app(argc, argv);
   QWidget window;
   window.setWindowTitle("Изображение в качестве фона");
   window.resize(350, 70);

   QPalette pal = window.palette();
   pal.setBrush(QPalette::Normal, QPalette::Window,
       QBrush(QPixmap("C:\\cpp\\projectsQt\\Test\\texture2.jpg")));
   window.setPalette(pal);

   QLabel *label = new QLabel("Текст надписи");
   label->setAlignment(Qt::AlignCenter);
   label->setStyleSheet(
    "background-image: url(C:/cpp/projectsQt/Test/texture.jpg);");
   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
Скриншот реквизитов