c++ - Qt drawRect 在后台

标签 c++ qt paint drawrect qpainter

我想绘制 slider 的背景。我试过了,但是颜色覆盖了整个 slider 。这是在QSlider的继承类中

void paintEvent(QPaintEvent *e) {
  QPainter painter(this);
  painter.begin(this);
  painter.setBrush(/*not important*/);

  // This covers up the control. How do I make it so the color is in
  // the background and the control is still visible?
  painter.drawRect(rect()); 

  painter.end();
}

最佳答案

要设置小部件的背景,您可以设置样式表:

theSlider->setStyleSheet("QSlider { background-color: green; }");

下面将设置小部件的背景,让您做更多的事情:

void paintEvent(QPaintEvent *event) {
  QPainter painter;
  painter.begin(this);
  painter.fillRect(rect(), /* brush, brush style or color */);
  painter.end(); 

  // This is very important if you don't want to handle _every_ 
  // detail about painting this particular widget. Without this 
  // the control would just be red, if that was the brush used, 
  // for instance.
  QSlider::paintEvent(event);    
}

顺便说一句。以下两行示例代码将产生警告:

QPainter painter(this);
painter.begin(this);

即这个使用 GCC 的:

QPainter::begin: A paint device can only be painted by one painter at a time.

所以请确保,正如我在示例中所做的那样,您要么执行 QPainter painter(this) 要么执行 painter.begin(this)

关于c++ - Qt drawRect 在后台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7942996/

相关文章:

c++ - 用于收集 PC 硬件/操作系统信息的库

windows - 奇怪的 Qt SSL 问题——出现错误 "No Error",没有别的,如果我忽略它,一切正常

android - 如何在 Canvas 上画一个半椭圆

android - 如何使用不受缩放或缩放影响的 Canvas 在 ImageView 上绘制线条?

c++ - 使用父类的运算符而不是子类

c++ - OSX 上的 libxml2 和 libxml2-dev

c++ - 如何解释时钟()?

c++ - QBitArray移位

c++ - 从鼠标左键单击 QTableView 获取行和列?

java 如何让一个矩形随时间移动