【发布时间】:2017-04-24 15:28:43
【问题描述】:
我有一个代表一张空白纸的 QImage 和一个用于在此图像上绘画的 QPainter。 有时,我想在任何绘制操作之前旋转/平移 QPainter,以便以“横向”方向绘制到此图像上。
这里是简化的sn-p代码:
_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.
不幸的是,这并没有像我预期的那样工作。似乎即使画家已旋转,它也不知道它可以在其中绘制的“新”边界,从而裁剪为“纵向”大小。
我尝试了以下方法无济于事:关闭剪辑(_painter->setClipping(false);),设置新的剪辑矩形(_painter->setClipRect(0, 0, _image.height(), _image.width());),并以各种方式调整窗口和视口。
我查看了 QPainter 和 QImage 的文档,并搜索了互联网,但我还没有发现之前讨论过的这个特定问题。
【问题讨论】:
-
好像你遇到了 Qt 错误。
-
一个错误意味着现有代码存在问题,这看起来更像是代码中缺少场景考虑。
-
paperRect().size()的值是什么?如果它仍然设置为纵向格式(例如 A4 为 210x294 毫米),那就可以解释很多了。 -
@JvO paperRect() 的值取决于所选纸张的大小和打印机的分辨率,并且绝对 不 取决于所选的方向,因为我正在绘图侧身到这张图片上。显然,我对“方向”和“景观”这两个术语的使用让一些人感到困惑,而我只是想用这些术语来帮助说明问题。
标签: c++ qt paint qpainter qimage