Как создавать PDF файлы из QGraphicsScene со скопируемым текстом?

Мой код создает pdf, отображая содержимое QGraphicsScene на правильно инициализированный QPrinter. При обработке приложения такой текст можно редактировать, копировать в буфер обмена и т.д. Как я могу создать pdf файл из QGraphicsScene, где моя текстовая строка также может быть скопирована, или это невозможно, и мне нужно создать QTextDocument для таких задач?

QGraphicsTextItem* textItem = new QGraphicsTextItem ( text );

textItem->setPlainText ( text );
textItem->setTextInteractionFlags ( Qt::TextEditorInteraction );
textItem->setFlags( QGraphicsItem::ItemIsSelectable | textItem->flags() );

scene->addItem( textItem );

QPrinter pdfPrinter; 
pdfPrinter.setOutputFormat( QPrinter::PdfFormat );
pdfPrinter.setPaperSize( QSize(scene->width(), scene->height()), QPrinter::Point );
pdfPrinter.setFullPage(true);
pdfPrinter.setOutputFileName( path );

QPainter pdfPainter;
pdfPainter.begin( &pdfPrinter);
scene->render( &pdfPainter );
pdfPainter.end();

Ответы

Ответ 1

Кажется, вам нужно использовать QTextDocument и написать свой контент в формате HTML. См. Мой ответ и мои комментарии к вопросу: Qt4: печать таблицы SQL в PDF

EDIT: я сделал сеанс отладки (с Visual Studio в Windows7) и перешел в сцену- > рендеринг. На каком-то этапе вызывается QGraphicsTextItem:: paint (...) в файле qgraphicsitem.cpp(строка 10067 в Qt 4.8.0), где вы можете видеть, что текстовый элемент хранится в QTextDocument.

Мое заключение (из упомянутого вопроса): текст печатается как текст в pdf-документ, а это означает, что ваша неспособность выбрать или скопировать текст - это просто артефакт вашего просмотра в формате pdf. Если xpdf, включая pdftotext, доступен для вашей платформы, вы можете легко проверить это.