2014-10-13 9 views
1

색상, 배경 또는 형식 (일반 텍스트 만)없이 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); 
} 

어떤 아이디어 ?? 미리 감사드립니다!

답변

2

사용이 :

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을 복제하므로이 새 문서로 작업합니다. 우리의 plainTextEdit는 접근 할 수 없으므로 인쇄 중에 사용자는 서식없는 텍스트를 보지 않습니다. 그러나 버퍼를 삭제하는 것을 잊지 마라.이 복제품을 더 필요로하지 않을 때.

결과 : PDF로

enter image description here

: 당신이 볼 수 있듯이

enter image description here

, 어떤 형식이 없습니다.

+0

이 방법은 효과가 있지만 텍스트가 크면 성능이 떨어집니다. 같은 일을하는 다른 방법이 있습니까? – Yore

+0

@ 예 물론 그렇습니다. 그러나 모든 것이 큰 데이터로는 성능이 낮습니다. 알다시피'printPlainText'와 같은 메소드가 없으므로 어쨌든 형식을 제거해야합니다. 내 접근 방식은 이것을 달성 할 수 있습니다. 제 생각에 QPainter를 사용한 렌더링은 비효율적입니다. 이 답변은 형식 삭제 방법을 향상시켜야 개선 될 수 있지만 이제는 더 쉽게 만들 수있는 쉬운 방법이 없습니다. – Chernobyl

+0

제 경우에는 효과가있었습니다. 다른 구성 요소로 인해 구성 요소의 내용을 변경할 수 없기 때문에 약간의 코드를 교체해야했습니다. 최종 접근 방식은 성능이 다소 떨어졌지만 인생은 그랬습니다 : D Thx. – Yore