ふちた@soramimi_jpです。
5.3.0で印刷するとずれる件ですが、解決しましたのでご報告いたします。
Qt5.3未満では、 printer->paperRect() と printer->pageRect() の返す結果が一致しており、
どちらも、原点が(0, 0)となっていたため、用紙左上隅が原点として印刷されていました。
Qt5.3では、 printer->pageRect() が、オフセットの付いた座標を返すため、そのまま印刷すると、
オフセットが適用された座標に印刷されてしまいました。
次に、その対策として、
QTransform t;
t.translate(-page.left(), -page.top());
painter.setTransform(t);
として、オフセットを相殺するような座標変換をしてみたところ、一見期待通りに動作したのですが、
QPixmap pixmap(100, 100);
pixmap.fill(Qt::transparent);
painter.drawPixmap(0, 0, pixmap);
の様に、用紙の内側かつページの外側に、透明なPixmapを描画したところ、縁が黒く塗られてしまう
という現象が見られました(これはプリンタドライバに依存するようです)
ここまできて、私の知識ではお手上げになりましたので、slashdot.jpで質問したところ、
QPageLayout::setModeを使うといいかも、という提案をもらいました。
QPageLayout layout = printer->pageLayout();
layout.setMode(QPageLayout::FullPageMode);
printer->setPageLayout(layout);
QPageLayout::FullPageModeを指定すると、Qt5.3未満と同じ印刷結果を得ることができました。
【まとめ】
発端: http://blog.soramimi.jp/?p=185
続編: http://blog.soramimi.jp/?p=189
解決: http://blog.soramimi.jp/?p=199
_______________________________________________
Qt-users mailing list
Qt-users@qt-users.jp
http://qt-users.jp/mailman/listinfo/qt-users