Eej*_*jin 6 c++ printing qt transform
我有一个QPrinter可以直接打印A4到物理打印机或PDF.现在我想使用QPainter以毫米为单位绘制,但当前坐标系似乎是A4的宽度和高度,以英寸乘以打印机的分辨率.
8.26英寸×1200 res = 9912
11.69英寸×1200 res = 14028
我试过以下但是文字结果很大.
auto page = printer.pageRect(QPrinter::Unit::Millimeter);
painter.setWindow(QRect(0, 0, page.width(), page.height()));
Run Code Online (Sandbox Code Playgroud)
如何更改此设置,以便我的QPainter可以绘制到210 x 297 mm而不是上述系统?
这是在Windows 10和Qt 5.10上.
我在X11(ubuntu linux)PDF打印上测试了这个方法,使用ScreenResolution
打印机模式:
painter.begin(printer);
int log_w = 210;
int log_h = 297;
painter.setWindow(0, 0, log_w, log_h);
int phys_w = printer->width();
int phys_h = printer->height();
painter.setViewport(0, 0, phys_w, phys_h);
Run Code Online (Sandbox Code Playgroud)
基本上,使用画家窗口设置逻辑尺寸(以毫米为单位),并为画家的视口提供打印机的物理尺寸。此行应在页面周围打印一个边框为 10 毫米的矩形:
painter.drawRect(10, 10, log_w - 20, log_h -20);
Run Code Online (Sandbox Code Playgroud)
文本应该相应地起作用。此代码应在矩形的左上角打印“Ok”一词:
QFont font = painter.font();
font.setPointSize(10); //1 cm height
painter.setFont(font);
painter.drawText(10, 20, "Ok");
painter.end();
Run Code Online (Sandbox Code Playgroud)
使用HighResolution
打印机模式,字体大小必须使用设置
font.setPixelSize(10); //1 cm height
Run Code Online (Sandbox Code Playgroud)
并且QPen
必须将 a 设置为画家:
QPen pen(Qt::black);
pen.setWidthF(0.2);
painter.setPen(pen);
painter.drawRect(10, 10, log_w - 20, log_h - 20);
Run Code Online (Sandbox Code Playgroud)
关于使用 失去设备依赖性setPixelSize
,我知道这里有说明:
可以使用 setPixelSize() 将屏幕上显示的字符高度设置为指定的像素数;然而,使用 setPointSize() 具有类似的效果并提供设备独立性。
但我认为它仅指屏幕,因为这里有说明:
在 QPrinter 设备上渲染文本时,重要的是要认识到,以点为单位指定的文本大小与为设备本身指定的分辨率无关。因此,在将文本与图形组合时指定字体大小(以像素为单位)可能会很有用,以确保它们的相对大小符合您的预期。
归档时间: |
|
查看次数: |
1114 次 |
最近记录: |