【问题标题】:print QPlainTextEdit document plain text only仅打印 QPlainTextEdit 文档纯文本
【发布时间】:2014-10-13 19:50:25
【问题描述】:

我想知道如何打印没有任何颜色、背景或格式的QPlainTextEdit 组件的文档(仅限纯文本)。我的代码是打印背景(在我的例子中是黑底白字)。

QPrinter printer;  
QPrintDialog dialog( &printer, NULL );  
dialog.setWindowTitle( tr( "Print Content" ) );  
if ( isSelection ) {  
    dialog.addEnabledOption( QAbstractPrintDialog::PrintSelection );  
}  
if ( dialog.exec() == QDialog::Accepted ) {  
    document->print(&printer);  
}  

有什么想法吗??提前致谢!

【问题讨论】:

    标签: c++ qt printing qplaintextedit


    【解决方案1】:

    使用这个:

    QPrinter printer(QPrinter::HighResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName("output.pdf");
    QString buffer = ui->plainTextEdit->document()->toHtml();
    ui->plainTextEdit->setPlainText(ui->plainTextEdit->toPlainText());
    ui->plainTextEdit->document()->print(&printer);
    ui->plainTextEdit->clear();
    ui->plainTextEdit->appendHtml(buffer);
    

    主要思想是只打印plainText而不格式化,但打印后设置普通格式化文本,这样用户就不会丢失格式化数据。

    我想到了改进,所以我也写了这个:

    QPrinter printer(QPrinter::HighResolution);
    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName("output.pdf");
    QTextDocument *buffer = ui->plainTextEdit->document()->clone();
    buffer->setPlainText(ui->plainTextEdit->toPlainText());
    buffer->print(&printer);
    

    为什么更好?我们克隆QTextDocument *buffer,所以我们使用这个新文档。我们的 plainTextEdit 仍然不可触摸,因此用户在打印时不会看到未格式化的文本。但是当你不再需要这个克隆时,不要忘记删除缓冲区。

    结果:

    在pdf中:

    如您所见,没有格式化。

    【讨论】:

    • 这行得通,但是如果文本很大,它的性能就会很低。有没有其他方法可以做同样的事情?
    • @Yore 是的,当然,但是大数据的一切都表现不佳。据我所知,没有像printPlainText 这样的方法,所以无论如何你都应该摆脱格式。我的方法允许实现这一点。我认为,使用 QPainter 进行渲染会更加低效。这个答案只能通过改进格式删除的方式来改进,但现在我看不到让它变得更好的简单方法。
    • 就我而言,它有效。我不得不替换您的一些代码,因为由于其中的其他内容,我无法更改组件的内容。我猜最后的方法在性能上有点差,但这就是生活:D Thx。
    猜你喜欢
    • 2017-03-29
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    相关资源
    最近更新 更多