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);
}
Этот код не работает, синий прямоугольник не рисуется. Но закомментированная строка работает отлично. Зачем?
Помимо настройки цвета кисти, вам нужно установить стиль кисти:
br.setStyle(Qt:SolidPattern);
Если вы проверите конструктор по умолчанию и сигнатуру конструктора, которую вы используете во втором примере, вы увидите, что вышеупомянутый вызов необходим:
QBrush ( const QColor & color, Qt::BrushStyle style = Qt::SolidPattern )
QBrush::QBrush ()
Создает черную кисть по умолчанию со стилем Qt :: NoBrush (т.е. это
кисть не будет заполнять формы).
От http://doc.qt.io/qt-4.8/qbrush.html
QBrush::QBrush ( Qt::BrushStyle style )
Создает черную кисть с заданным стилем.
QBrush::QBrush ()
Создает черную кисть по умолчанию со стилем Qt :: NoBrush (то есть эта кисть не будет заполнять фигуры).
Так
QBrush br = QBrush();
Должен работать, чтобы создать экземпляр объекта.