我有一张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的文档,并浏览了互联网,但我还没有发现之前讨论过的这个特殊问题。
答案 0 :(得分:0)
事实证明,问题与我发布的代码无关。这是我的解决方案,以防将来有人遇到这个问题。
最初是在实现自定义QPrintEngine / QPaintEngine类时出现的问题。问题中发布的代码有效 - 但是,我忘记更新QPrintEngine::property()
函数以返回与PPK_PageRect
和PPK_PaperRect
键对应的新维度,当方向设置为横向时。
请注意QPrintEngine::metric()
函数 not 似乎需要以这种方式更新(在我的项目中)。我假设这是因为当使用此QPrintEngine实现的QPrinter用作绘图设备时,metric
函数主要用于我的项目中。{/ p>
在任何情况下,修复此问题都可以在“侧面”正确绘制QImage。