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のインスタンスを流用すれば印刷設定を引き継いで印刷できます。