Я разрабатывал настольное приложение Qt с помощью QSS, используя превосходный Qt-Frameless-Window-DarkStyle от Jorgen-VikingGod в качестве базовой линии.К сожалению, мы также должны поддерживать довольно устаревшее планшетное устройство (которое работает под управлением Windows) в полевых условиях, что означает, что крошечные кнопки спин-бокса были фактически непригодны для некоторых наших клиентов.
Предложенное решение заключалось в создании больших +/ - и расположите их на противоположных сторонах поля прокрутки:
![SpinBox with big buttons](https://i.stack.imgur.com/mDmpk.png)
Однако это приводит к плохому поведению с некоторыми удобными элементами управления Qt, такими как QColorDialog
:
![Bad QColorDialog](https://i.stack.imgur.com/pmWoA.png)
Мой код 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
, поэтому, если я могу исключить определенный подкласс, это также будет достаточно.