使用QSS设置QAbstractSpinBox样式时,从QColorDialog中的QSpinBoxes中排除样式

问题描述 投票:2回答:1

我使用Jorgen-VikingGod的优秀Qt-Frameless-Window-DarkStyle作为基线,使用QSS设计Qt桌面应用程序。不幸的是,我们还必须在现场支持一个相当过时的平板设备(运行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不支持CSS3风格的:not选择器,它也没有提供我可以使用的等价物。

尽管如此,除了QColorDialog中的那些之外,我有什么方式可以将这种风格应用到我的应用程序中的每个旋转框中?或者任何不涉及我在我的应用程序中的每个旋转框实例上通过ID / objectName设置此样式的替代方法?看一下源代码,看来QColorDialog使用了一个名为QSpinBoxQColSpinBox派生类,所以如果我可以排除一个特定的子类,那么这也就足够了。

css qt qtstylesheets
1个回答
1
投票

您可以使用CSS / QSS设置QColorDialog的某些组件的样式。

enter image description here

所以你可以添加这样的东西:

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

为旋转框添加一些额外的空间。我还为QColorDialog ColorPicker添加了min-width和min-height,如下所示:

QColorDialog QColorPicker {
    min-width: 20em;
    min-height: 20em;
    border: solid 1px gray;
}
© www.soinside.com 2019 - 2024. All rights reserved.