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() 直接渲染 QTextEdit 的 document 。这甚至更好,因为它呈现为矢量图形。
QTextEdit* textField= ...
// textedit is correctly visible
QPrinter printer(QPrinter::HighResolution);
...
QPainter painter( &printer );
// textField->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);
textField->document()->drawContents(&painter);
我很难将 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() 直接渲染 QTextEdit 的 document 。这甚至更好,因为它呈现为矢量图形。
QTextEdit* textField= ...
// textedit is correctly visible
QPrinter printer(QPrinter::HighResolution);
...
QPainter painter( &printer );
// textField->render(&painter, QPoint(), QRegion(), QWidget::DrawChildren);
textField->document()->drawContents(&painter);