将缩放的QImage绘制到QWidget上时的人工制品

时间:2010-09-11 17:08:37

标签: 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());
} 

所以基本上,它在QImage上绘制一个蓝色的圆圈,然后将QImage绘制到小部件上。然而,当我调整窗口大小时,我得到了奇怪的文物(在左上角)。这就是它的样子:

原: alt text

更改窗口大小后

alt text

有谁知道为什么会这样?

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

2 个答案:

答案 0 :(得分:3)

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

来自Qt docs:

  

QImage :: QImage(int width,int   高度,格式格式)

     

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

     

警告:这将创建一个QImage   未初始化的数据。呼叫填写()   用适当的方式填充图像   绘制到它之前的像素值   与QPainter。

答案 1 :(得分:1)

您的图像是透明的(圆圈除外),在绘制(调整大小的)图像之前,您永远不会清除窗口,因此上一个圆圈/窗口大小的瑕疵可能会遗留下来。

在将图像绘制到窗口之前,请添加以下行:

QPalette palette = QApplication::palette();
painter.fillRect(event->rect(), palette.color(QPalette::Window));