Не могу установить QBrush на QPainter

void Widget::paintEvent(QPaintEvent *) {
QPainter painter(this);

QBrush br;
br.setColor(Qt::blue);
painter.setBrush(br);

//    painter.setBrush(QBrush(Qt::blue));

painter.drawRect(10, 10, 50, 50);
}

Этот код не работает, синий прямоугольник не рисуется. Но закомментированная строка работает отлично. Зачем?

2

Решение

Помимо настройки цвета кисти, вам нужно установить стиль кисти:

br.setStyle(Qt:SolidPattern);

Если вы проверите конструктор по умолчанию и сигнатуру конструктора, которую вы используете во втором примере, вы увидите, что вышеупомянутый вызов необходим:

QBrush ( const QColor & color, Qt::BrushStyle style = Qt::SolidPattern )

QBrush::QBrush ()

Создает черную кисть по умолчанию со стилем Qt :: NoBrush (т.е. это
кисть не будет заполнять формы).

2

Другие решения

От http://doc.qt.io/qt-4.8/qbrush.html

QBrush::QBrush ( Qt::BrushStyle style )

Создает черную кисть с заданным стилем.

QBrush::QBrush ()

Создает черную кисть по умолчанию со стилем Qt :: NoBrush (то есть эта кисть не будет заполнять фигуры).

Так

QBrush br = QBrush();

Должен работать, чтобы создать экземпляр объекта.

1

По вопросам рекламы [email protected]