Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Caduceus от Апрель 15, 2009, 21:25



Название: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: Caduceus от Апрель 15, 2009, 21:25
Сделал виджет-панель с градиентынм фоном - все кнопки что на нем - тоже стали с таким фоном - это я так понимаю они стиль унаследовали. Как вернуть обратно им стиль всего приложения?


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: lit-uriy от Апрель 15, 2009, 21:27
>>Сделал виджет-панель с градиентынм фоном
А стиль чем задёшь, таблицей стилей или нет?


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: Caduceus от Апрель 15, 2009, 21:29
В дизайнере в строке style Sheet


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: SimpleSunny от Апрель 15, 2009, 21:36
For example, the following style sheet specifies that all QLineEdits should use yellow as their background color, and all QCheckBoxes should use red as the text color:

QLineEdit { background: yellow }
QCheckBox { color: red }


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: Caduceus от Апрель 15, 2009, 21:42
И чё?


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: lit-uriy от Апрель 15, 2009, 21:46
2 Caduceus, тебе надо будет указвать более полную запись:
QWidget#Form {background-color: rgb(29, 63, 255);}
где "Form" имя экзепляра интерисующего тебя класса (см. тут (http://doc.crossplatform.ru/qt/4.5.0/stylesheet-syntax.html#selector-types))


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: Caduceus от Апрель 15, 2009, 21:54
В дизайнере через EditStyleSheet само прописалось так:
background-color: qlineargradient(spread:reflect, x1:0.5, y1:0.0170455, x2:0.517, y2:0.5, stop:0 rgba(203, 197, 191, 255), stop:1 rgba(230, 226, 221, 255));

Для дочерних элементов поле в EditStyleShhet пустое

Можно ли как-то через дизайнер отменить распространение стиля на дочерние элементы? Без программинга


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: lit-uriy от Апрель 15, 2009, 21:55
я тебе пример привел. забей его в окошко настройки стиля того виджета который должен иметь особый стиль и посмотри.


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: Caduceus от Апрель 15, 2009, 21:58
Сделал так:
widget#Dialog {background-color: qlineargradient(spread:reflect, x1:0.5, y1:0.0170455, x2:0.517, y2:0.5, stop:0 rgba(203, 197, 191, 255), stop:1 rgba(230, 226, 221, 255))};

Где widget - это имя виджета с градиентом, а Dialog - имя диалога с этим виджетом

Градиент у виджета пропал


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: lit-uriy от Апрель 15, 2009, 22:09
Записи:
QWidget#Form и widget#Dialog
разве ничем принципиально не отличаются?

Помоему очевидно, что в начале идет имя класса, а затем, как я уже говорил, имя виджета.



Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: Caduceus от Апрель 15, 2009, 22:15
дааа, поправил. Лучше, но как-то не так
Кнопки не такие. Справа во вложении - какие должны быть
Стиль сейчас на детей не распространяется, но дети не такие, какие были бы, если б не лежали на этом виджете:


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: lit-uriy от Апрель 15, 2009, 22:20
Вот у меня тестовый пример, просто создана форма "Form" (экземпляр QWidget), на нее брошена кнопка.
Затем установлен стиль для формы.


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: Caduceus от Апрель 15, 2009, 22:22
А запусти превью в разных стилях - кнопка будет как надо - в стиле выбранного превью?


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: lit-uriy от Апрель 15, 2009, 22:44
Вот, в том порядке (слева-направо, сверху-вниз), в котором стили в менюхе идут
UI
Код:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>320</width>
    <height>240</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <property name="styleSheet">
   <string>QWidget#Form {background-color: rgb(29, 63, 255);}</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>110</x>
     <y>110</y>
     <width>75</width>
     <height>24</height>
    </rect>
   </property>
   <property name="text">
    <string>PushButton</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>


Название: Re: Как сделать чтобы дочерные виджеты не нстледовали стиль родителя?
Отправлено: Caduceus от Апрель 15, 2009, 22:50
Хмм, ну у меня все по типу. В превью кнопки не такие как надо.

Ладно, спасибо, буду копать