はい、それでは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の詳細はリファレンスへ)
実行すると以下のようになります。
印刷したものは以下のようになります。
以上です。
