Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Crazy Sage от Сентябрь 12, 2014, 08:36



Название: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Crazy Sage от Сентябрь 12, 2014, 08:36
Добрый день, разбираюсь с css в qt и что-то не могу разобраться.
Есть главное окно, которому хочется сделать картинку фоном и видоизменить кнопки. С кнопками всё нормально, а вот с фоном проблемы

Структура объектов в QtDesigner'е
PlayArea QMainWindow
-centralWidget QWidget
--button1 QPushButton
--button2 QPushButton
--button3 QPushButton
--button4 QPushButton

Делаю styleSheet для верхнего объекта (PlayArea)
варианты
Код:
#PlayArea{
background-image: url(:/files/images/big_window.png);
}

Код:
PlayArea{
background-image: url(:/files/images/big_window.png);
}

Код:
QMainWindow{
background-image: url(:/files/images/big_window.png);
}

Код:
#centralWidget{
background-image: url(:/files/images/big_window.png);
}

Код:
QWidget#centralWidget{
background-image: url(:/files/images/big_window.png);
}

не работают
единственный вариант, при котором у меня установился фон это
Код:
QWidget{
background-image: url(:/files/images/big_window.png);
}

Но в такой ситуации у всех кнопок ставится фоном эта же картинка, что меня совершенно не устраивает. Что я делаю не так?


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: OKTA от Сентябрь 12, 2014, 09:25
Код показывай.


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Crazy Sage от Сентябрь 12, 2014, 09:27
Всё собрано в дизайнере, никакого кода кроме этой структуры классов и стайлшита нету. Могу конечно выложить мэйн, который делает PlayArea p->show(), но вряд ли в нём дело.


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: navrocky от Сентябрь 12, 2014, 09:31
Да, странно. Можешь попробовать QSS задать напрямую для centralWidget(), так работает. Или вот так:

Код:
QMainWindow > QWidget {
background: yellow;
}

Правда этот вариант также затрагивает меню и статусбар.


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: OKTA от Сентябрь 12, 2014, 09:38
Задавай лучше не в дизайнере, а через QApplication::setStyleSheet. Простого
Код:
QMainWindow{
background-image: url(:/files/images/big_window.png);
}
должно хватить без проблем.


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: VPS от Сентябрь 12, 2014, 09:58
Да, странно. Можешь попробовать QSS задать напрямую для centralWidget(), так работает. Или вот так:

Код:
QMainWindow > QWidget {
background: yellow;
}

Правда этот вариант также затрагивает меню и статусбар.
Если обращаться по имени в поле "objectName" (например, по умолчанию - "#centralwidget"), то не должно ничего другого "задеть ".


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Bepec от Сентябрь 12, 2014, 14:42
в Qt 4 имеется баг. Нельзя задать фоновую картинку главному окну.
Можно обойти, поставив на главное окно фрейм с нулевыми полями.


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: OKTA от Сентябрь 12, 2014, 14:45
Уверен, Верес? Я тут ради интереса создал проект с QMainWindow и впиндюрил этому QMainWindow фоновую картинку только что ???


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Bepec от Сентябрь 12, 2014, 14:49
Ммм.. уверен для 4.7.2. Сейчас уже отошёл от него на пятёрку.


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: OKTA от Сентябрь 12, 2014, 14:51
В 4.7.4 проверял!


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Bepec от Сентябрь 12, 2014, 15:35
Знач там уже поправлено :)


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Crazy Sage от Сентябрь 12, 2014, 15:46
Странно, в 4.8.6 не работает с QMainWindow.
Спасибо за совет с фреймом, воспользовался им.
С centralwiget'ом впрочем тоже была нелепая ошибка, не заметил что там w маленькая.
Спасибо всем.


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Bepec от Сентябрь 12, 2014, 16:13
Ххы, всё же выплыл баг :D


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: OKTA от Сентябрь 12, 2014, 16:29
 ??? какие-то происки WinAPi, не иначе  ;D


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Bepec от Сентябрь 12, 2014, 16:36
Да там весёлые тролли писали, у них даже в стандартных стайлшитах вместо 0 в цвете написано O :D


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Crazy Sage от Сентябрь 12, 2014, 18:11
Ххы, всё же выплыл баг :D

Причём строго по правилу: "Чем более мистическую фигню творит программа, тем более дурацкую ошибку ты совершил".


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: lit-uriy от Август 07, 2017, 14:48
а в Qt5.7.1 Что-то тоже не удаётся через QSS установить фон для центрального виджета:
Код
CSS
 
QWidget[UiWidgetElevation="uiBackground"]
{
   background-color: red;
}
 
 
Центральному виджету задано свойство UiWidgetElevation со значением uiBackground,
и только для центрального виджета такая проблема есть, если в тиснуть в другое место, то там у него фон появляется.


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: Bepec от Август 07, 2017, 19:13
У них этот баг в состоянии - никому нахрен не надо :D


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: lit-uriy от Август 08, 2017, 06:17
вот ведь задница, а так всё стройно шло до этого момента


Название: Re: Установка картинки фоном через stylesheet [Qt4]
Отправлено: lit-uriy от Август 08, 2017, 06:23
П.С.
К стати, стал использовать LESS для удобства, в паре с программой Koala (под винду), она болтается в трее и автоматом генерит CSS-ку при каждом изменении Less-файла.

Особенности:
для инверсий надо использовать CSS3-нотацию, т.е. :not(...) иначе LESS ругается.
А затем с помощью текстового редактора и регулярок над CSS-файлом нотация CSS3 превращается в "!", как это предусмотренно в QSS