はい、それではQTextDocumentを使ったテキストの印刷をやっていきます。
QTextDocumentクラスは書式設定されたテキストの保持や表示、編集のためのクラスです。
詳しいことはリファレンスを参照してください。
サンプルはC++ GUI Programming with Qt4の192ページのものを少し変更し使います。
そして、いつものようにQtCreaterなどでMainWindowなどのGUI部品を定義済みであるとします。(QtCreaterなどの使い方は ”Qtをはじめよう" を見てください。)
ではコードを
MainWindow::on_pushButton_clicked()//ボタンクリックスロット { QStringList stringList;//印刷に使われる文字列リスト stringList << "Title1: This is Sample1. That is Sample1."; stringList << "Title2: This is Sample2. That is Sample2."; stringList << "Title3: This is Sample3. That is Sample3."; stringList << "Title4: This is Sample4. That is Sample4."; QString html; foreach(QString entry, stringList) { QStringList fields = entry.split(": ");// ": "で分割する QString title = Qt::escape(fields[0]);//エスケープする QString body = Qt::escape(fields[1]);//エスケープする html += "<table width=\"100%\" border=1 cellspacing=0>\n" "<tr><td bgcolor=\"lightgray\"><font size=\"+1\">" "<b><i>" + title + "</i></b></font>\n<tr><td>" + body + "\n</table>\n" + "<br>\n"; } QPrinter printer(QPrinter::ScreenResolution);//プリンター描画のためのペイントデバイス QPrintDialog printDialog(&printer, this);//印刷するかどうかのダイアログ表示 if(printDialog.exec() == QDialog::Accepted)//OKなら印刷 { QTextDocument textDocument; textDocument.setHtml(html);//HTML文字列をセット textDocument.print(&printer);//印刷 } }
少し長いですね。ですがやってることは単純です。
まずQStringListを作成しています。ここで作ったものが印刷に使われます。
次にQStringListを走査し、タイトルとそれ以外に分離し書式をHTMLで整形してQString htmlに追加格納していきます。(escapeの詳細はリファレンスへ)
その次にQPrinterを作成し、プリントダイアログを表示させ印刷の確認を表示させます。
OKが押されたらQTextDocumentを定義し、setHtmlで先ほど作成したQString htmlをセットし、印刷します。(setHtmlの詳細はリファレンスへ)
実行すると以下のようになります。
印刷したものは以下のようになります。
以上です。