Qt QPainter镜像不工作
我有一个功能类似于绘画的程序,我有一个变更请求: 添加一个名为mirror mode的新函数,在mirror模式中,画布被左半部分和右半部分分开。在其中一半中绘制的所有图片都应镜像到另一半 我添加了代码,使镜像部分出现;但是,原始图像似乎不是由QPainter绘制的。是否有一件简单的事情让QPainter同时显示镜像图像和绘制的图像。相关源代码如下:Qt QPainter镜像不工作,qt,merge,qpainter,mirror,Qt,Merge,Qpainter,Mirror,我有一个功能类似于绘画的程序,我有一个变更请求: 添加一个名为mirror mode的新函数,在mirror模式中,画布被左半部分和右半部分分开。在其中一半中绘制的所有图片都应镜像到另一半 我添加了代码,使镜像部分出现;但是,原始图像似乎不是由QPainter绘制的。是否有一件简单的事情让QPainter同时显示镜像图像和绘制的图像。相关源代码如下: // void ImageArea::paintEvent(QPaintEvent *event) { QPainter *painter
//
void ImageArea::paintEvent(QPaintEvent *event)
{
QPainter *painter = new QPainter();
painter->begin(this);
QRect *rect = new QRect(event->rect());
painter->setBrush(QBrush(QPixmap(":media/textures/transparent.jpg")));
painter->drawRect(0, 0,
mImage->rect().right() - 1,
mImage->rect().bottom() - 1);
painter->drawImage(event->rect(), *mImage, event->rect());
painter->setPen(Qt::NoPen);
painter->setBrush(QBrush(Qt::black));
painter->drawRect(QRect(mImage->rect().right(),
mImage->rect().bottom(), 6, 6));
painter->drawImage(event->rect(), *mImage, event->rect());
painter->end();
painter->begin(this);
QImage tmp(mImage->mirrored(true,false));
painter->drawImage(0, 0, tmp);
painter->end();
}
对镜像效果使用QTransform可能更有效。至少如果你使用Qt的OpenGL后端,你的代码中有一些内存泄漏。您不必在堆上创建
painter
和rect
对象。但是如果你这样做了,你也应该删除它们。你不需要调用painter->end()
和begin
两次。这就是问题所在。