我使用Jorgen-VikingGod的优秀Qt-Frameless-Window-DarkStyle作为基线,使用QSS设计Qt桌面应用程序。不幸的是,我们还必须在现场支持一个相当过时的平板设备(运行Windows),这意味着微小的旋转盒按钮实际上对我们的一些客户无法使用。
建议的解决方案是创建大+/-按钮并将它们放在旋转框的两侧:
但是,这会产生某些Qt便利控件的不良行为,例如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不支持CSS3风格的:not
选择器,它也没有提供我可以使用的等价物。
尽管如此,除了QColorDialog
中的那些之外,我有什么方式可以将这种风格应用到我的应用程序中的每个旋转框中?或者任何不涉及我在我的应用程序中的每个旋转框实例上通过ID / objectName设置此样式的替代方法?看一下源代码,看来QColorDialog
使用了一个名为QSpinBox
的QColSpinBox
派生类,所以如果我可以排除一个特定的子类,那么这也就足够了。