Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QPainter镜像不工作_Qt_Merge_Qpainter_Mirror - Fatal编程技术网

Qt QPainter镜像不工作

Qt QPainter镜像不工作,qt,merge,qpainter,mirror,Qt,Merge,Qpainter,Mirror,我有一个功能类似于绘画的程序,我有一个变更请求: 添加一个名为mirror mode的新函数,在mirror模式中,画布被左半部分和右半部分分开。在其中一半中绘制的所有图片都应镜像到另一半 我添加了代码,使镜像部分出现;但是,原始图像似乎不是由QPainter绘制的。是否有一件简单的事情让QPainter同时显示镜像图像和绘制的图像。相关源代码如下: // void ImageArea::paintEvent(QPaintEvent *event) { QPainter *painter

我有一个功能类似于绘画的程序,我有一个变更请求:

添加一个名为mirror mode的新函数,在mirror模式中,画布被左半部分和右半部分分开。在其中一半中绘制的所有图片都应镜像到另一半

我添加了代码,使镜像部分出现;但是,原始图像似乎不是由QPainter绘制的。是否有一件简单的事情让QPainter同时显示镜像图像和绘制的图像。相关源代码如下:

//
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
两次。这就是问题所在。