2011年12月31日土曜日

( Qt C++ )QPainterを用いた印刷位置を移動させながらの印刷


はい、それではQPainterを用いた印刷位置を移動させながらの印刷をやっていきます。
サンプルは独自のものを使います。
そして、いつものようにQtCreaterなどでMainWindowなどのGUI部品を定義済みであるとします。(QtCreaterなどの使い方は ”Qtをはじめよう" を見てください。)
ではコードを

void MainWindow::on_pushButton_clicked()//ボタンクリックスロット
{
    QString text = "Sample PDF Print !!";

    QPrinter printer(QPrinter::ScreenResolution);//プリンター描画のためのペイントデバイス
    QPrintDialog printDialog(&printer, this);//印刷するかどうかのダイアログ表示

    if(printDialog.exec() == QDialog::Accepted)//OKなら印刷
    {
        QPainter painter(&printer);
        painter.setFont(QFont());//フォント設定(この場合デフォルト)
        painter.setPen(QPen(Qt::black, 2, Qt::SolidLine));//ペンをセット
        painter.setBrush(QBrush(Qt::gray, Qt::SolidPattern));//ブラシセット

        painter.drawText(painter.window(), Qt::AlignHCenter, text);//タイトル描画

        painter.translate(0, 40);//現在地から(0,40)、つまり下に40移動
        painter.drawRect(0, 0, painter.window().width(), 40);//四角形描画

        painter.translate(0, 60);//現在地から(0,60)、つまり下に60移動
        painter.drawRect(0, 0, painter.window().width(), 40);

        painter.translate(0, 80);//現在地から(0,80)、つまり下に80移動
        painter.drawRect(0, 0, painter.window().width(), 40);

        painter.translate(0, 100);//現在地から(0,100)、つまり下に100移動
        painter.drawRect(0, 0, painter.window().width(), 40);
    }
}

はい、簡単ですね。プリントダイアログの表示まではいいですね。そのまんまです。
次にQPainterを作成し、順にペン、ブラシをセットし、タイトルである "Sample PDF Print !!"を印刷します。
次にpainter.translateを呼び出しています。これは絶対座標の指定ではなく現在の位置からの座標移動になります。(リファレンス
その後、drawRectで四角形を描画し、これら移動→四角形描画を3度繰り返します。(リファレンス

実行すると以下のようになります。


印刷されたものは以下のようになります。
 
 以上です。なお、今日からブログ名が「タンスの引き出し」になります。では、また来年!