我的主窗口有以下绘图功能:
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绘制到小部件上。然而,当我调整窗口大小时,我得到了奇怪的文物(在左上角)。这就是它的样子:
原:
:
有谁知道为什么会这样?
(我正在Ubuntu 10.04下工作,如果感兴趣的话)
答案 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));