c++ - 仅打印 QPlainTextEdit 文档纯文本

标签 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);  
}  

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

最佳答案

使用这个:

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

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

我考虑了改进,所以我也写了这个:

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,以便我们使用这个新文档。我们的纯文本编辑保持不可更改,因此用户在打印时不会看到未格式化的文本。但是,当您不再需要此克隆时,请不要忘记删除缓冲区。

结果:

enter image description here

在 PDF 中:

enter image description here

如您所见,没有格式。

关于c++ - 仅打印 QPlainTextEdit 文档纯文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26347818/

相关文章:

c++ - 三角函数/ float 问题

c++ - 与 STL vector 共享数组

c++ - 添加命名空间会删除对类私有(private)成员的好友访问权限

python - 实现 PySide 标注

java - 为什么 JSP out.print() 函数不能正常工作

c++ - C 和 C++ 中的结构内部定义差异

visual-studio - 如何使用 Visual Studio 2017 安装程序安装调试工具?

c++ - 使用QT查看来自相机的流图像

python - 如何打印没有前导 'shape' 信息的 Polars 数据帧

java - 如何使用Pageable Interface避免打印范围1-9999