将缩放的 QImage 绘制到 QWidget 上时的伪像

Tom*_*Tom 1 qt qt4

我的主窗口具有以下绘图功能:

void MainWindow::paintEvent(QPaintEvent*)
{
    QImage sign(50, 50, QImage::Format_ARGB32_Premultiplied);
    QPainter p(&sign);
    p.setRenderHint(QPainter::Antialiasing, true);
    p.fillRect(sign.rect(), QColor(255, 255, 255, 0));
    p.setBrush(Qt::blue);
    p.setPen(Qt::NoPen);
    p.drawEllipse(0, 0, sign.width(), sign.height());
    p.end();

    QPainter painter(this);
    painter.drawImage(rect(), sign, sign.rect());
} 
Run Code Online (Sandbox Code Playgroud)

所以基本上,它会在 QImage 上绘制一个蓝色填充圆圈,然后将该 QImage 绘制到小部件上。然而,当我调整窗口大小时,我得到了奇怪的人工制品(在左上角)。它看起来是这样的:

原来的: 替代文本

更改窗口大小后: 替代文本

有谁知道这是为什么?

(我正在 Ubuntu 10.04 下工作,如果你感兴趣的话)

Arn*_*nce 5

我认为你的QImage初始化是垃圾。构建完成后,调用sign.fill(). 我尝试了你的代码,甚至在我的机器上调整大小之前,工件就已经存在了。

来自 Qt 文档:

QImage::QImage ( int 宽度, int 高度, Format 格式 )

构造具有给定宽度、高度和格式的图像。

警告:这将创建一个带有未初始化数据的 QImage。在使用 QPainter 在图像上绘图之前,调用 fill() 用适当的像素值填充图像。