Qt designer как изменить фон

Три метода Qt для получения цвета фона и фонового изображения (оба могут быть масштабированы, также возможен метод qss), Русские Блоги, лучший сайт для обмена техническими статьями программиста.

предисловие: Есть только два вида оконных фонов, а также фоновые цвета и фоновые рисунки. Как установить фон окна в 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Атрибут:

  - dingmz_frc - dingmz_frc

Или в коде:

 

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


Доброго времени суток.
Пишу приложение, весь дизайн которого делаю через designer. Очень удобно.
Подскажите, пожалуйста, как вставить картинку вместо фона(именно картинку! цвет я менял в дизайнере так: pallete->изменить палитру-> window) и тоже самое касается кнопок. Что-то мне кажется, что это легко делается даже без написания кода, но я нигде не смог найти про это.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



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:

CSS
1
background-image: url("путь к картинке")

Добавлено через 12 минут
Хотя лучше поступать немного по другому:

CSS
1
border-image: url("путь к картинке") 0 0 0 0 stretch stretch

Тогда растягиваться будет.



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, большое спасибо!
Только проблема вот в чём: у меня все label и button принимают этот же фон. На кнопки мне всё равно(я буду в них свои картинки вставлять), но вот как сделать, чтобы надписи были как бы «просвечивали».

Миниатюры

Подскажите, пожалуйста, как вставить картинку вместо фона
 



0



0x90h

659 / 439 / 155

Регистрация: 01.10.2015

Сообщений: 1,241

14.05.2017, 14:22

6

DmmiTrY, указывая стиль, можно воспользоваться ID-селектором, чтобы стиль применялся к объекту с определенным идентификатором, в качестве которого выступает свойство objectName:

CSS
1
QWidget#Widget {border-image: url("путь к картинке");}

где до «решетки» — тип объекта, а после — имя объекта.

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

Цитата
Сообщение от DmmiTrY
Посмотреть сообщение

но вот как сделать, чтобы надписи были как бы «просвечивали»

указать в цвете текста альфа-канал (чем ближе к 0, тем более прозрачен)



0



3 / 3 / 0

Регистрация: 18.11.2015

Сообщений: 77

14.05.2017, 16:34

 [ТС]

9

0x90h, таким способом у меня вообще фон пропадает, писал в styleSheet так:
QWidget#WindowGame {border-image: url(«C:/Qt/Projects/virtual_robot_1.1/virtual_robot_1/background»);}
Разве я где-то ошибся?



0



659 / 439 / 155

Регистрация: 01.10.2015

Сообщений: 1,241

14.05.2017, 16:46

10

Цитата
Сообщение от DmmiTrY
Посмотреть сообщение

Разве я где-то ошибся?

Статья из документации, описывающая синтаксис 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>

Понравилась статья? Поделить с друзьями:
  • Qqmlapplicationengine failed to load component network error
  • Qgis как изменить язык
  • Pytorch memory error
  • Python перезапуск программы при ошибке
  • Python как изменить раскладку клавиатуры