【问题标题】:Set border for QSpinBox when focused设置焦点时为 QSpinBox 设置边框
【发布时间】:2016-05-11 18:52:55
【问题描述】:

对于已经存在的 Qt 项目,我想通过 q​​ss-fle 为焦点小部件设置边框。但我遇到了一些意想不到的结果。当我更改QSpinBox(和QDoubleSpinBox)的边框时,边框会按照我的预期发生变化,但是向上按钮和向下按钮也会发生变化并且看起来很丑。

这是我的风格定义(完整示例可用here):

QSpinBox:focus
{
    border-width: 2px;
    border-style: solid;
    border-color: green;
}

我的问题是:如何更改边框的外观并同时保留向上按钮和向下按钮的外观。我正在寻找的解决方案不应该是跨平台或跨版本。

我的环境:
- KUbuntu 15.10 (amd64);
- Qt 5.4 (x64)。

更新

这里是另一个风格的例子:

QSpinBox
{
    border-width: 2px;
    border-style: solid;
    border-color : red;
}

QSpinBox:hover
{
    border-width: 2px;
    border-style: solid;
    border-color: blue;
}

小部件如下所示:

【问题讨论】:

  • 我猜您已经尝试为向上箭头和向下箭头设置样式?如果没有,那里有 qss 示例doc.qt.io/qt-4.8/stylesheet-examples.html#customizing-qspinbox
  • 您的问题可能是由于您的“焦点”样式传播到包括箭头在内的整个小部件,特别是border-with 属性。这可能导致这种意外行为
  • @floppy12,我没试过。我很难重现按钮的外观。
  • 你不应该完全复制它;我的意思是你应该精确一个样式,甚至是一个默认样式,以防止你“聚焦”样式来覆盖它——从下面的链接中举一个例子并尝试一下
  • 值得一提的是:在将样式表设置为旋转框时,我在 Windows 上的 Qt5.4 上得到了非常相似的行为——按钮看起来很难看。确实,似乎一旦您对旋转框进行了任何样式表更改,您就必须一路走下去并通过样式表指定其余部分(如 floppy12 建议的那样)。但实际上:我们(即 OP)是否应该提供我们自己的手工制作的 up_arrow.png 等来进行简单的样式更改工作?这有多乱?我同意 Glutton 的观点,这会很困难!

标签: c++ qt qtstylesheets


【解决方案1】:

当您将样式表应用到QSpinBox 时,这个小部件完全使用QStyleSheetStyle 绘制(这个类不是公共API 的一部分)。

因此,您必须完全设置旋转框的样式,包括向上/向下按钮,或者根本不使用样式表。

向上/向下按钮不是分离的小部件,因此您不能对它们应用不同的样式。

所以我建议继承QSpinBox 并重新实现paintEvent() 方法。在您的 paintEvent() 方法中,您只需调用它的默认实现,然后您将在周围绘制一个矩形。

【讨论】:

  • 正是我建议的... +1
【解决方案2】:

尝试用另一种随机样式编辑您的 qss 文件,看看它是否一致。

QSpinBox
{
    border-width: 2px;
    border-style: solid;
    border-color : red;
}

QSpinBox:hover
{
    border-width: 2px;
    border-style: solid;
    border-color: blue;
}

编辑:

我看到你的箭头仍然处于不良状态,所以我建议你做两件事:

  • 还可以使用背景图像属性左右设置上下箭头的样式(截取所需箭头的屏幕截图..左右)

  • 伪造者通过样式表设置此部分的样式,并通过代码覆盖“QPaintEvent onFocus 处理程序”。将边框设置为绿色不会那么痛苦

【讨论】:

  • 编辑建议
  • 第一个案例对我来说非常糟糕。第二种情况或多或少可以接受,但无论如何这不是解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多