QtTextEdit:文本内容未呈现给 QPainter

QtTextEdit: text content not rendered to QPainter

我很难将 QTextEdit 的上下文呈现给画家(打印为 PDF)。所有其他小部件都正确打印,只有 QTextWidget 的 text 没有。

小部件在 GUI 中看起来不错:

但是QTextWidget的文本没有打印成PDF:

代码很简单。也许我需要添加额外的标志?我希望呈现的文本与它在 GUI 中的外观相同,因此单独呈现文本(使用 textField->document()->drawContents(&painter),是不是最好的解决方案)

QTextEdit* textField= ...
// textedit is correctly visible

QPrinter printer(QPrinter::HighResolution);
...
QPainter painter( &printer );
textField->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);

您的代码片段没有任何问题。我试过了:

void MainWindow::on_pushButton_clicked()
{
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFormat(QPrinter::PdfFormat);
printer.setOutputFileName("output.pdf");
QPainter painter( &printer );
ui->textEdit->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);
}

它起作用了。我正在使用 Qt 5.5.1。

您可以尝试(作为替代)textEdit->print(printer);painter->drawText(printer.pageRect(), ui->textEdit->toPlainText());

最后,一个好的解决方案是使用 drawContents() 直接渲染 QTextEditdocument 。这甚至更好,因为它呈现为矢量图形。

QTextEdit* textField= ...

// textedit is correctly visible
QPrinter printer(QPrinter::HighResolution);
...

QPainter painter( &printer );
// textField->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);
textField->document()->drawContents(&painter);