Qt drawRect в фоновом режиме

Я хочу нарисовать фон слайдера. Я пробовал это, но цвет покрывает весь слайдер. Это унаследованный класс 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();
}

person Geore Shg    schedule 30.10.2011    source источник
comment
Что вы хотите сделать, это нарисовать фон виджета? Пожалуйста, будьте более конкретными.   -  person Morten Kristensen    schedule 30.10.2011


Ответы (1)


Чтобы установить фон виджета, вы можете установить таблицу стилей:

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: Устройство рисования может быть раскрашено только одним рисовальщиком за раз.

Поэтому убедитесь, как я делаю в своем примере, что вы делаете либо QPainter painter(this), либо painter.begin(this).

person Morten Kristensen    schedule 30.10.2011