A. QTextDocument + QPrinter
QPlainTextEdit は内部で QTextDocument を使っているため、 その document をそのまま印刷できます。
基本コード(印刷ダイアログ付き)
#include <QPrinter>
#include <QPrintDialog>
#include <QTextDocument>
void MainWindow::printPlainTextEdit()
{
QPrinter printer(QPrinter::HighResolution);
QPrintDialog dialog(&printer, this);
dialog.setWindowTitle("印刷");
if (dialog.exec() != QDialog::Accepted)
return;
ui->plainTextEdit->document()->print(&printer);
}
余白等を調整する
QPrinter printer(QPrinter::HighResolution);
printer.setPageSize(QPageSize(QPageSize::A4));
printer.setPageMargins(QMarginsF(15, 15, 15, 15), QPageLayout::Millimeter);
印刷プレビュー
#include <QPrintPreviewDialog>
void MainWindow::printPreview()
{
QPrinter printer(QPrinter::HighResolution);
QPrintPreviewDialog preview(&printer, this);
connect(&preview, &QPrintPreviewDialog::paintRequested,
this, [this](QPrinter *printer){
ui->plainTextEdit->document()->print(printer);
});
preview.exec();
}
保存場所指定
printer.setOutputFileName("/home/user/Documents/sample.pdf");
B. ページ設定のダイアログ
#include <QtPrintSupport/QPrinter>
#include <QtPrintSupport/QPageSetupDialog>
void MainWindow::openPageSetup()
{
QPrinter printer(QPrinter::HighResolution);
QPageSetupDialog dialog(&printer, this);
dialog.setWindowTitle("ページ設定");
if (dialog.exec() == QDialog::Accepted) {
// OK が押された
// printer に設定が反映されている
}
}
QPrinterのインスタンスを流用すれば印刷設定を引き継いで印刷できます。