仅打印QPlainTextEdit文档纯文本

时间:2014-10-13 19:50:25

标签: c++ qt printing qplaintextedit

我想知道如何在没有任何颜色,背景或格式的情况下打印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);  
}  

任何想法?提前谢谢!

1 个答案:

答案 0 :(得分:3)

使用此:

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仍然是不可触摸的,因此用户在打印时不会看到未格式化的文本。但是不要忘记删除缓冲区当你不再需要这个克隆时。

结果:

enter image description here

在pdf中:

enter image description here

如您所见,没有格式化。