2013-04-21 2 views
1
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); 
} 

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

ответ

2

Помимо для установки цвета кисти, вам нужно задать стиль для кисти:

br.setStyle(Qt:SolidPattern); 

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

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

QBrush::QBrush()

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

1

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

QBrush::QBrush (Qt::BrushStyle style) 

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

QBrush::QBrush() 

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

Так

QBrush br = QBrush(); 

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

+0

Нет необходимости создавать объект, а затем вызвать конструктор копирования для 'br'. Поскольку 'QBrush' не является структурой POD, вызов' QBrush br(); 'вместо' QBrush br'' не будет иметь никакого значения. –

+0

Я знаю, но, похоже, подходит для вопроса. Приветствия. – vidario