2011年12月29日木曜日

( Qt C++ )QPrinter、QPrintDialogを使った画像の印刷


はい、それではQPrinter、QPrintDialogを使った画像の印刷をやっていきます。
サンプルはC++ GUI Programming with Qt4の191ページのコードを少し変更して使います。
そして、いつものようにQtCreaterなどでMainWindowなどのGUI部品を定義済みであるとします。(QtCreaterなどの使い方は ”Qtをはじめよう" を見てください。)
ではコードを

void MainWindow::on_pushButton_clicked()//ボタンクリックスロット
{
    QImage image("//home//ubuntu001//thumbnail.jpg");//印刷するイメージ
    QPrinter printer(QPrinter::ScreenResolution);//プリンター描画のためのペイントデバイス
    QPrintDialog printDialog(&printer, this);//印刷するかどうかのダイアログ表示
  
    if(printDialog.exec() == QDialog::Accepted)//OKなら印刷
   {
        QPainter painter(&printer);
        QRect rect = painter.viewport();
        QSize size = image.size();
        size.scale(rect.size(), Qt::KeepAspectRatio);//縦横比維持

        painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
        painter.setWindow(image.rect());
        painter.drawImage(0, 0, image);
    }
}

はい、簡単ですね。まず印刷用のイメージのを作成します。その後プリンター描画のためのペイントデバイスとなるQPrinterを作成し、QPrintDialogにセットし印刷するかどうかの確認ダイアログを表示しています。QPrinter::ScreenResolutionなどの値はリファレンスを参照してください。(リファレンス

QDialog::Accepted(つまりOKってこと)ならば印刷を開始します。
描画のためQPainterに先ほどのprinter(QPrinter)をセットします。そして、painterのビューポートと画像のサイズを取得し、ビューポート、ウィンドウを変更し印刷しています。
(ちなみにビューポートとは物理座標矩形領域、ウィンドウは論理座標矩形領域です。)


実行すると以下のようになります。(Printで実際にプリントされます。)



以上です。