Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: aliks-os от Май 17, 2012, 16:41



Название: QStyleSheet и дочерний объект [РЕШЕНО]
Отправлено: aliks-os от Май 17, 2012, 16:41
Есть QWidget в котором я устанавливаю некий QStyleSheet.
Создаю диалоговое окно, в качестве родителя использую вышеупомянутый виджет.
Соответственно диалоговое окно наследует стиль родителя.
Пытался сбросить стиль у диалогового окна след.образом (по материалам нашедшим в инете)
Код:
this->setStyleSheet("/**/");
this->setStyleSheet("");
this->setStyleSheet(styleSheet());

Однако никакого положительного результата я не получил.
Есть у кого какие идеи по этому поводу?


Название: Re: QStyleSheet и дочерний объект
Отправлено: ruzik от Май 17, 2012, 20:19
Попробуй поставить какой-либо ненулевой стиль и посмотри подействует ли он.


Название: Re: QStyleSheet и дочерний объект
Отправлено: GreatSnake от Май 17, 2012, 20:30
Попробуй поставить какой-либо ненулевой стиль и посмотри подействует ли он.
Не подействует, т.к. все установки css работают в режиме слияния.
Тут 2 варианта - либо уменьшить действие стиля либо дать диалогу другого  родителя.


Название: Re: QStyleSheet и дочерний объект
Отправлено: Termit от Май 18, 2012, 08:28
Есть у кого какие идеи по этому поводу?

В самом qss при указании объекта к которому применяется стиль можно указать не класс (в терминах css) типа ".QWidget" а id типа "#MySuperWidget".

Так что прав GreatSnake нужно уменьшать (конкретизировать) действие стиля.


Название: Re: QStyleSheet и дочерний объект
Отправлено: aliks-os от Май 18, 2012, 08:30
дать диалогу другого  родителя.

Это помогает, оставил как последний вариант

либо уменьшить действие стиля

а как это правильно сделать?

Код:
QString stl = "QWidget {border: 1px solid black;"
                                  "border-top-color: white;"
                                  "border-left-color: white;"
                                  "border-right-color: white;"
                                  "border-bottom-color: white;}";

Вариант меня не устраивает, а вот этот почему то не работает


Код:
QString stl = "TContainerField {border: 1px solid black;"
                                  "border-top-color: white;"
                                  "border-left-color: white;"
                                  "border-right-color: white;"
                                  "border-bottom-color: white;}";

TContainerField наследник от класса TContainer этот в свою очередь от QWidget


Название: Re: QStyleSheet и дочерний объект
Отправлено: trot от Май 18, 2012, 09:35
Надо сначало дать имя объекту через setObjectName и только после этого можно задавать конкретный стиль для этого объекта, указывая имя объекта вначале которого ставим #. Например

myWidget->setObjectName("myWidget");

QString stl = "#myWidget {border: 1px solid black;"
                                  "border-top-color: white;"
                                  "border-left-color: white;"
                                  "border-right-color: white;"
                                  "border-bottom-color: white;}";


Цитировать
все установки css работают в режиме слияния.
Это работает не всегда. Например, когда я указал для QSpinBox бордюр красный, то отменились все стили для subcontrol-ов, и в таких случаях (может быть и не вовсех), как я понимаю, если у объекта есть subcontrol-ы и ты хочешь поменять какой-то стиль у объекта, то это потребует полное переопределение стилей для всех его subcontrol-ов.





Название: Re: QStyleSheet и дочерний объект
Отправлено: aliks-os от Май 18, 2012, 09:58
ну имя объекту я конечно присваиваю...

Все решено! я заблудился в родителях и детях
осуществил фильтрацию по классам и все стало на свои места.

Всем большое спасибо!