2
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);
}

此代码不起作用,未绘制蓝色矩形。但是注释行工作正常。为什么?

4

2 回答 2

3

除了设置画笔的颜色外,您还需要为画笔设置样式:

br.setStyle(Qt:SolidPattern);

如果您检查默认构造函数,以及您在第二个示例中使用的构造函数签名,您将看到需要上述调用:

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

QBrush::QBrush ()

构造一个样式为 Qt::NoBrush 的默认黑色画笔(即这个画笔不会填充形状)。

于 2013-04-21T11:50:10.107 回答
1

来自http://doc.qt.io/qt-4.8/qbrush.html

QBrush::QBrush ( Qt::BrushStyle style )

构造具有给定样式的黑色画笔。

QBrush::QBrush ()

构造一个样式为 Qt::NoBrush 的默认黑色画笔(即这个画笔不会填充形状)。

所以

QBrush br = QBrush();

应该努力实例化对象。

于 2013-04-21T11:50:45.867 回答