QtTextEdit:未呈现给QPainter的文本内容

时间:2016-01-27 09:54:04

标签: qt qpainter qprinter

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

小部件在GUI中看起来很好:

QTextEdit in widget

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

enter image description here

代码非常简单。也许我需要添加额外的标志?我希望文本呈现与在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);

2 个答案:

答案 0 :(得分:1)

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

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。 enter image description here

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

答案 1 :(得分:0)

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

QTextEdit* textField= ...

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

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