Исключение стиля из QSpinBoxes в QColorDialog при использовании QSS для стиля QAbstractSpinBox - PullRequest
0 голосов
/ 21 февраля 2019

Я разрабатывал настольное приложение Qt с помощью QSS, используя превосходный Qt-Frameless-Window-DarkStyle от Jorgen-VikingGod в качестве базовой линии.К сожалению, мы также должны поддерживать довольно устаревшее планшетное устройство (которое работает под управлением Windows) в полевых условиях, что означает, что крошечные кнопки спин-бокса были фактически непригодны для некоторых наших клиентов.

Предложенное решение заключалось в создании больших +/ - и расположите их на противоположных сторонах поля прокрутки:

SpinBox with big buttons

Однако это приводит к плохому поведению с некоторыми удобными элементами управления Qt, такими как QColorDialog:

Bad QColorDialog

Мой код QSS выглядит следующим образом:

QAbstractSpinBox {
  height: 18px;
  border-radius: 2px;
  border: 1px solid rgba(38,38,38,255);
}
QAbstractSpinBox:focus {
  border-color: palette(highlight);
}
QAbstractSpinBox::up-button {
  subcontrol-origin: border;
  subcontrol-position: center right;
  width: 18px;
  height: 18px;
  border-image: url(:/darkstyle/icon_spin_box_button.png);
  margin-left: 1px;
}
QAbstractSpinBox::down-button {
  subcontrol-origin: border;
  subcontrol-position: center left;
  width: 18px;
  height: 18px;
  border-image: url(:/darkstyle/icon_spin_box_button.png);
  margin-right: 1px;
}
QAbstractSpinBox::up-button:pressed {
  border-image: url(:/darkstyle/icon_spin_box_button_pressed.png);
}
QAbstractSpinBox::down-button:pressed {
  border-image: url(:/darkstyle/icon_spin_box_button_pressed.png);
}
QAbstractSpinBox::up-arrow {
  image: url(:/darkstyle/icon_spin_box_plus_sign.png);
  width: 14px;
  height: 14px;
}
QAbstractSpinBox::down-arrow {
  image: url(:/darkstyle/icon_spin_box_minus_sign.png);
  width: 14px;
  height: 14px;
}
QAbstractSpinBox::up-arrow:disabled,
QAbstractSpinBox::up-arrow:off {
  image: url(:/darkstyle/icon_spin_box_plus_sign_disabled.png);
  width: 14px;
  height: 14px;
}
QAbstractSpinBox::down-arrow:disabled,
QAbstractSpinBox::down-arrow:off {
  image: url(:/darkstyle/icon_spin_box_minus_sign_disabled.png);
  width: 14px;
  height: 14px;
}

До сих пор я пытался заменить QAbstractSpinBox селекторы с .QSpinBox, .QDoubleSpinBox, но это привело к путанице, которая выглядела как гибрид стиля по умолчанию (стрелки вверх / вниз, сложенные справа) с моим стилем (темные границы, выпуклый вид и т. д.).

Похоже, что QSS не поддерживает селектор :not в стиле CSS3 и не предоставляет эквивалент, который я могу использовать.

Учитывая все вышесказанное, могу ли я применить этот стиль к каждому центру вращения в моем приложении, КРОМЕ этого в QColorDialog?Или какая-либо альтернатива, которая не требует от меня установки этого стиля по ID / objectName для каждого отдельного экземпляра прядильного окна, которое есть в моем приложении?Просматривая исходный код, выясняется, что QColorDialog использует класс QSpinBox, названный QColSpinBox, поэтому, если я могу исключить определенный подкласс, это также будет достаточно.

1 Ответ

0 голосов
/ 29 апреля 2019

Некоторые из компонентов QColorDialog можно стилизовать с помощью CSS / QSS.

enter image description here

Таким образом, вы можете добавить что-то вроде этого:

QColorDialog QSpinBox {
    min-width: 3.5em;
    text-align: center;
}

, чтобы добавить дополнительное пространство для спин-боксов.Я также добавляю минимальная ширина и минимальная высота к QColorDialog QColorPicker , например:

QColorDialog QColorPicker {
    min-width: 20em;
    min-height: 20em;
    border: solid 1px gray;
}
...