パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Qt 5.3.0 で印刷するとずれる」記事へのコメント

  • 対策できました。

    http://blog.soramimi.jp/?p=189 [soramimi.jp]

    用紙座標とページ座標 [qt-project.org]があって、QPainterで描画する際には、ページ座標が用いられる。
    ・ Qt5.3.0未満では、用紙座標の原点とページ座標の原点が共に(0, 0)だった。
    ・ Qt5.3.0では、ページ座標の原点にオフセットが付いてている。

    そんなわけで、painter.setTransformで、明示的に座標変換する必要があるようです。

    • by Anonymous Coward on 2014年05月28日 19時27分 (#2610325)

      それはそれとして、QPageLayout::setMode() では解決できないかな?

      親コメント
      • by paprika (5024) on 2014年05月28日 19時59分 (#2610346) 日記

        layout.setMode(QPageLayout::FullPageMode);
        ですね。今まで知りませんでした。

        期待通りに動作しました。もうしばらく検証してみますが、
        たぶんこれが最もスマートで最良の解決策だと思います。
        QTransformとか面倒なもの使わなくて済むし、素晴らしいです。
        ありがとうございます。

        void MainWindow::on_pushButton_clicked()
        {
                QPrintDialog dlg(this);
                if (dlg.exec() == QDialog::Accepted) {
                        QPrinter *printer = dlg.printer();

                        QPageLayout layout = printer->pageLayout();
                        layout.setMode(QPageLayout::FullPageMode);
                        printer->setPageLayout(layout);

                        printer->setPaperSize(QPrinter::A4);
                        printer->setOrientation(QPrinter::Portrait);
                        printer->setPageMargins(0, 0, 0, 0, QPrinter::Millimeter);
                        printer->setResolution(254);

                        QPainter painter(printer);
                        painter.setPen(QPen(Qt::black, 20));
                        painter.drawEllipse(0, 0, 2100, 2970);
                }
        }

        親コメント

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

処理中...