предисловие: Есть только два вида оконных фонов, а также фоновые цвета и фоновые рисунки. Как установить фон окна в Qt? Следующие три метода суммированы.
1.QPalette установить фон
2, реализовать paintEvent, использовать QPainter, чтобы нарисовать фон
3. Используйте QSS, чтобы установить фон
—————————————————————
О QSS (Таблица стилейЯ не хочу больше говорить, обычно я не использую QSS для установки фона окна.Также не рекомендуется, (Примечание: это для окон). Если это подкомпонент, конечно. Поскольку окно использует QSS для установки фона, если дочерний компонент не установлен таким же образом, стиль родительского окна будет наследоваться по умолчанию.
В общем, подкомпонентам не нужно устанавливать фоновое изображение, даже если требуется QSS, оно может быть полностью удовлетворено. Цвет фона и значок в основном устанавливаются. Для установки цвета фона в QSS можно использовать метод фона или цвета фона. Значок можно установить с помощью setPixmap или setIcon!
———————————————————————-
Во-первых,QPaletteУстановить фон
Следующие методы могут быть использованы в конструкторе:
1) Установите цвет фона
QPalette palette(this->palette());
palette.setColor(QPalette::Background, Qt::black);
this->setPalette(palette);
Или:
QPalette palette;
palette.setBrush(this->backgroundRole(), Qt::black);
this->setPalette(palette);
Здесь можно использовать как setColor, так и setBrush!
Нужно здесьОбратите особое вниманиеНемного, еслиQWidgetПокажите прямо, есть цвет фона, но если это дочернее окно родительского QWidget, то нет фона! Вам необходимо добавить следующий код:
setAutoFillBackground(true);
2) Установите фоновое изображение
QPixmap pixmap = QPixmap(«:/qm/safe»).scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
this->setPalette(palette);
Устанавливаете ли вы цвет фона или фоновое изображение выше, QPalette :: Background эквивалентен this-> backgroundRole ()!
II.paintEventУстановить фон
1) Установите цвет фона
void IIIMark::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.setBrush(Qt::black);
painter.drawRect(this->rect());
}
2) Установите фоновое изображение
void IIIMark::paintEvent(QPaintEvent *)
{
QPixmap pixmap = QPixmap(«:/qm/safe»).scaled(this->size());
QPainter painter(this);
painter.drawPixmap(this->rect(), pixmap);
}
III.QSS(Таблица стилей)Установить фон
1) Установите цвет фона
MainWin::MainWin()
{
this->setStyleSheet(«background-color: yellow»);
iLabel = new QLabel(this);
iLabel->setStyleSheet(«background-color: rgba(97%,80%,9%,50%)»);
}
2) Установите фоновое изображение
MainWin::MainWin()
{
this->setStyleSheet(«background-image:url(:/bmp/IMG_0345.JPG)»);
iLabel = new QLabel(this);
iLabel->setStyleSheet(«background-image:url(:/bmp/1257253475842.jpg)»);
}
—————————————————————
Обратите внимание:
(1) Все вышеперечисленноеКартинка масштабируется под размер окна, Поскольку данный размер изображения может не соответствовать требованиям, поэтому используйте этот метод! Конечно, изображение будет деформировано после растяжения или сжатия (за исключением сплошных изображений), поэтому вы должны обратить внимание на этот метод для изображений.
(2) При установке диапазона фона лучше использовать this-> rect (), если вам нужно заполнить все окно, потому что я вижу, что многие люди используют такие выражения, как QRect (0, 0, 400, 400), поэтому, если размер окна Что изменилось? Это предложение изменится?
(3) Если фоновое изображение или цвет фона могут быть изменены с ним, что является так называемой функцией скининга, используйте метод paintEvent и используйте update () для обновления, когда необходимо изменение.
(4) this-> setAutoFillBackground (true) снова напоминает мне о tr (), которым многие злоупотребляют. Когда используется это предложение? Может быть лучше использовать QPalette, чтобы установить фон и сравнить его с удалением этого предложения (используется, когда есть родительское окно). Если этот QWidget отображается напрямую, он имеет цвет фона, а если он помещен в родительское окно, он не имеет никакого эффекта. Просто добавьте это предложение!
——————————
Сравните несколько методов: первые два могут легко добиться масштабирования изображения (используя функцию масштабирования) и использовать настройки таблицы стилей QSS, как указано выше.background-imageСпособ не может быть достигнут, если вы используете таблицы стилей для достижения статического масштабирования изображения могут быть установленыborder-imageАтрибут:
Или в коде:
setStyleSheet(QString::fromUtf8(«border-image: url(:/png/example.png)«));
Таким образом, изображение будет масштабироваться при изменении размера окна.
Оригинальная статья:http://blog.163.com/dingmz_frcmyblog/blog/static/21730402320141115552592/
3 / 3 / 0 Регистрация: 18.11.2015 Сообщений: 77 |
|
1 |
|
Подскажите, пожалуйста, как вставить картинку вместо фона13.05.2017, 21:12. Показов 10559. Ответов 9
Доброго времени суток.
__________________
0 |
7275 / 6220 / 2833 Регистрация: 14.04.2014 Сообщений: 26,871 |
|
14.05.2017, 08:11 |
2 |
Программно.
0 |
Wyn 1067 / 649 / 229 Регистрация: 14.01.2016 Сообщений: 2,031 Записей в блоге: 9 |
||||||||
14.05.2017, 09:52 |
3 |
|||||||
Сообщение было отмечено DmmiTrY как решение РешениеDmmiTrY, это можно сделать с помощью qss. Пишите в поле stylesheet:
Добавлено через 12 минут
Тогда растягиваться будет.
1 |
7275 / 6220 / 2833 Регистрация: 14.04.2014 Сообщений: 26,871 |
|
14.05.2017, 11:26 |
4 |
Wyn, это в обычном окне будет работать?
0 |
3 / 3 / 0 Регистрация: 18.11.2015 Сообщений: 77 |
|
14.05.2017, 13:17 [ТС] |
5 |
Wyn, большое спасибо! Миниатюры
0 |
0x90h 659 / 439 / 155 Регистрация: 01.10.2015 Сообщений: 1,241 |
||||
14.05.2017, 14:22 |
6 |
|||
DmmiTrY, указывая стиль, можно воспользоваться ID-селектором, чтобы стиль применялся к объекту с определенным идентификатором, в качестве которого выступает свойство objectName:
где до «решетки» — тип объекта, а после — имя объекта. Wyn, а у меня в дизайнере border-image отображает, но при запуске вместо фона-картинки только стандартная унаследованная палитра… (((
0 |
1067 / 649 / 229 Регистрация: 14.01.2016 Сообщений: 2,031 Записей в блоге: 9 |
|
14.05.2017, 15:44 |
7 |
nmcf, а почему нет? Только данный код нужно в селектор загнать, чтобы он куда попало не применялся.
0 |
зомбяк 1564 / 1213 / 345 Регистрация: 14.05.2017 Сообщений: 3,936 |
|
14.05.2017, 15:58 |
8 |
но вот как сделать, чтобы надписи были как бы «просвечивали» указать в цвете текста альфа-канал (чем ближе к 0, тем более прозрачен)
0 |
3 / 3 / 0 Регистрация: 18.11.2015 Сообщений: 77 |
|
14.05.2017, 16:34 [ТС] |
9 |
0x90h, таким способом у меня вообще фон пропадает, писал в styleSheet так:
0 |
659 / 439 / 155 Регистрация: 01.10.2015 Сообщений: 1,241 |
|
14.05.2017, 16:46 |
10 |
Разве я где-то ошибся? Статья из документации, описывающая синтаксис QSS, там же указаны все виды селекторов в разделе «Selector Types», посмотрите описание для ID Selector, проверьте написанное вами правило, может где-то и ошиблись…
0 |
Вот так работает, но остается белая рамочка вокруг окна и не окрашенный прямоугольник сверху.
Скажите пожалуйста, в чем может быть дело и как это исправить?
QPalette Pal(palette()); QImage background2(":/Images/Images/splash-background.png"); Pal.setBrush(QPalette::Background, background2); this->setAutoFillBackground(true); this->setPalette(Pal);вот код страницы
<?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>begin</class> <widget class="QWidget" name="begin"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>800</width> <height>681</height> </rect> </property> <property name="minimumSize"> <size> <width>800</width> <height>600</height> </size> </property> <property name="windowTitle"> <string>Form</string> </property> <layout class="QGridLayout" name="gridLayout"> <item row="2" column="0"> <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,1,1"> <item> <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QWidget" name="widget" native="true"> <layout class="QGridLayout" name="gridLayout_2"> <item row="0" column="0"> <layout class="QVBoxLayout" name="verticalLayout_5" stretch="1,1"> <item> <layout class="QVBoxLayout" name="verticalLayout_3"> <item> <spacer name="verticalSpacer_3"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> <item> <widget class="QLineEdit" name="login_lineEdit"> <property name="minimumSize"> <size> <width>0</width> <height>40</height> </size> </property> <property name="placeholderText"> <string>login</string> </property> </widget> </item> <item> <spacer name="verticalSpacer_4"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> <item> <widget class="QLineEdit" name="password_lineEdit"> <property name="minimumSize"> <size> <width>0</width> <height>40</height> </size> </property> <property name="placeholderText"> <string>password</string> </property> </widget> </item> <item> <spacer name="verticalSpacer_5"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> <item> <widget class="QLineEdit" name="secret_lineEdit"> <property name="minimumSize"> <size> <width>0</width> <height>40</height> </size> </property> <property name="placeholderText"> <string>secret phrase</string> </property> </widget> </item> <item> <spacer name="verticalSpacer_6"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>40</height> </size> </property> </spacer> </item> </layout> </item> <item> <layout class="QVBoxLayout" name="verticalLayout_4"> <item> <spacer name="verticalSpacer_7"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>231</width> <height>13</height> </size> </property> </spacer> </item> <item> <layout class="QVBoxLayout" name="verticalLayout_2"> <item> <layout class="QHBoxLayout" name="horizontalLayout_3"> <item> <spacer name="horizontalSpacer_3"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="signIn_Button"> <property name="minimumSize"> <size> <width>200</width> <height>70</height> </size> </property> <property name="maximumSize"> <size> <width>200</width> <height>16777215</height> </size> </property> <property name="text"> <string>Sign in</string> </property> </widget> </item> <item> <spacer name="horizontalSpacer_4"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </item> <item> <spacer name="verticalSpacer_8"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>231</width> <height>13</height> </size> </property> </spacer> </item> <item> <layout class="QHBoxLayout" name="horizontalLayout_2"> <item> <spacer name="horizontalSpacer_5"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QPushButton" name="register_Button"> <property name="minimumSize"> <size> <width>200</width> <height>70</height> </size> </property> <property name="maximumSize"> <size> <width>200</width> <height>16777215</height> </size> </property> <property name="text"> <string>Register</string> </property> </widget> </item> <item> <spacer name="horizontalSpacer_6"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </item> </layout> </item> <item> <spacer name="verticalSpacer_9"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>231</width> <height>13</height> </size> </property> </spacer> </item> </layout> </item> </layout> </item> </layout> </widget> </item> <item> <spacer name="horizontalSpacer_2"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </item> <item row="1" column="0"> <layout class="QHBoxLayout" name="horizontalLayout_4"> <item> <spacer name="horizontalSpacer_7"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> <item> <widget class="QLabel" name="labe1PageBegin"> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item> <spacer name="horizontalSpacer_8"> <property name="orientation"> <enum>Qt::Horizontal</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>40</width> <height>20</height> </size> </property> </spacer> </item> </layout> </item> <item row="3" column="0"> <spacer name="verticalSpacer_2"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>30</height> </size> </property> </spacer> </item> <item row="0" column="0"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> </property> <property name="sizeHint" stdset="0"> <size> <width>20</width> <height>30</height> </size> </property> </spacer> </item> </layout> </widget> <resources/> <connections/> </ui>