使用旋转的QPainter剪辑绘制到QImage的错误区域

时间:2017-04-24 15:28:44

标签: c++ qt paint qpainter qimage

我有一张QImage代表一张白纸和一张QPainter,用于在此图像上绘画。 有时,我会想要在任何绘画操作之前旋转/翻译QPainter,以便在" Landscape"中绘制到此图像上。取向。

以下是代码的简化代码段:

_image = new QImage(paperRect().size(), QImage::Format_RGB888);
_painter->begin(_image);

if (_orientation == QPrinter::Landscape)
{
    _painter->translate(0, _image->height());
    _painter->rotate(270);
}

// Painting operations here.

不幸的是,这不像我预期的那样有效。似乎即使画家已经轮换,它也不知道" new"它可以在其中绘制的界限,从而剪裁到"肖像"大小

我尝试了以下操作无济于事:关闭裁剪(_painter->setClipping(false);),设置新裁剪矩形(_painter->setClipRect(0, 0, _image.height(), _image.width());),并以各种方式调整窗口和视口。

我查看了QPainter和QImage的文档,并浏览了互联网,但我还没有发现之前讨论过的这个特殊问题。

1 个答案:

答案 0 :(得分:0)

事实证明,问题与我发布的代码无关。这是我的解决方案,以防将来有人遇到这个问题。

最初是在实现自定义QPrintEngine / QPaintEngine类时出现的问题。问题中发布的代码有效 - 但是,我忘记更新QPrintEngine::property()函数以返回与PPK_PageRectPPK_PaperRect键对应的新维度,当方向设置为横向时。

请注意QPrintEngine::metric()函数 not 似乎需要以这种方式更新(在我的项目中)。我假设这是因为当使用此QPrintEngine实现的QPrinter用作绘图设备时,metric函数主要用于我的项目中。{/ p>

在任何情况下,修复此问题都可以在“侧面”正确绘制QImage。