【问题标题】:QtTextEdit: text content not rendered to QPainterQtTextEdit:文本内容未呈现给 QPainter
【发布时间】:2016-01-27 09:54:03
【问题描述】:

我很难将 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);

【问题讨论】:

    标签: qt qpainter qprinter


    【解决方案1】:

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

    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());

    【讨论】:

    • 有趣 :) 也许这是 Qt 4.8.2 中的错误
    • 4.8.x 中有一些打印问题。你是在 MAC 下使用 Qt 吗?
    • 不,使用 Windows7
    • 更新到 4.8.7 得到相同的结果,嗯,我想我需要检查 Qt >5
    • 尝试:QPrinter::PrinterResolution 代替 QPrinter::HighResolution。结果一样吗?
    【解决方案2】:

    最后,一个很好的解决方案是使用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);
    

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 2016-09-10
      • 2020-07-23
      • 1970-01-01
      • 2021-08-12
      • 1970-01-01
      • 1970-01-01
      • 2021-11-05
      • 1970-01-01
      相关资源
      最近更新 更多