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

#c #qt #paint #drawrect #qpainter

#c #qt #Краски #drawrect #qpainter

Вопрос:

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

Комментарии:

1. Что вы хотите сделать, это нарисовать фон виджета? Пожалуйста, будьте немного конкретнее.

Ответ №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) .