【问题标题】:Get QPushButton Pressed Background Color获取 QPushButton 按下的背景颜色
【发布时间】:2016-04-08 05:51:05
【问题描述】:

如何获取 QPushButton 的按下背景颜色?

if (isDown())
    _BGColor = <pressed background color>; // how to get this???
else
    _BGColor = palette().color(QPalette::Background); // this is to get the idle backcolor

提前致谢!!!

【问题讨论】:

  • 欢迎来到 Stackoverflow。你能解释一下你想做什么吗?似乎获得这种颜色不是一个好主意。我们可以找到更好的解决您最初问题的方法吗?
  • 我有一个 QPushButton 子类,当长按按钮时,我想用背景的反色画一个圆圈,然后在它里面是一个带有背景颜色的复选符号。我的另一个选择是擦除圆圈的某些部分(使该部分透明)以创建复选标记。
  • 我想要做的是在我的按钮上有一个覆盖圆圈,中间有一个检查形状的整体。它用于按钮的选中属性,例如有一个复选框,但我想将其呈现为绘图。
  • 你是不是在子类的PaintEvent中写了上面的代码,试着在PaintEvent中写,然后在mousePressEvent中调用Update函数。这应该为您提供背景颜色的当前值。
  • 我尝试在setDown(true) 上方使用update() 和/或repaint(),但它没有获得背景颜色的当前值。

标签: c++ qt qcolor qpalette


【解决方案1】:

很难(如果不是不可能的话)找到一种方法来获取按下按钮时的背景颜色,因为它取决于样式,并且不能保证样式尊重调色板。

但是我建议两种不同的方法:

  1. 您可以使用样式表(更简单)设置​​自己的背景颜色,或者自己实现按钮的绘制,使用样式或重新实现paintEvent()。见Customizing QPushButton

  2. 要使用反色在按钮上绘画,您可以为画家设置合成模式以获得反色。

例如:

painter.setPen(QColor(255, 255, 255));
painter.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination);

(注意使用这个例子,中间灰色(128,128,128)的反色是完全一样的颜色)

QPainter::CompositionMode

【讨论】:

    猜你喜欢
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2016-04-11
    • 2022-01-02
    • 2016-06-25
    • 2016-08-12
    相关资源
    最近更新 更多