#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)
.