Qt を使用して、アイテムを に表示するツールに取り組んでいますQGraphicsScene
。アイテムはポリゴンとQGraphicsTextItems
. 後者にはハイパーリンクを含めることができます。
問題: ダイアグラムをエクスポートしようとしていますが、ハイパーリンクをアクティブのままにしたいと考えています。
QImage
レンダラーを
使用すると素敵な PNG が生成されますが、(明らかに) ハイパーリンクは生成されません。QSvgRenderer
ハイパーリンクも埋め込まない SVG を生成します。
QPrinter
(多かれ少なかれ)仕事をするPDFを生成することができます-ハイパーリンクはクリック可能であり、それが原則として必要なものです。ダイアグラムを Web に公開したいという点を除けば、PDF は実際には選択肢にはなりません。
QGraphicsScene
をHTML フォームでレンダリングする方法が見つかりませんでした。私は何か見落としてますか?それを行う方法はありますか?
ありがとう
編集
コード例:
from PySide import QtGui, QtCore
app = QtGui.QApplication([])
scene = QtGui.QGraphicsScene()
view = QtGui.QGraphicsView(scene)
item = QtGui.QGraphicsTextItem()
item.setOpenExternalLinks(True)
item.setHtml('<a href="http://stackoverflow.com">Hello</a>')
item.setTextInteractionFlags(QtCore.Qt.LinksAccessibleByMouse)
scene.addItem(item)
view.show()
app.exec_()
この例では、クリック可能なハイパーリンク (既定のシステム アプリケーションへのリンクを開く) を含むシーンを表示します。私のアプリケーションでは、シーンにはいくつかのグラフィック項目も含まれていますが、アイデアを得るにはこれで十分だと思います: リンクをクリックできるように、このシーンを HTML でレンダリング (または印刷またはエクスポート) したいと考えています。
次のコードは、PDF へのエクスポートを行います。
pdf_printer = QPrinter()
pdf_printer.setOutputFormat(QPrinter.PdfFormat)
pdf_printer.setPaperSize(rect.size().toSize(), QPrinter.Point)
pdf_printer.setFullPage(True)
pdf_printer.setOutputFileName(filename)
pdf_painter = QPainter()
pdf_painter.begin(pdf_printer)
scene.render(pdf_painter, source=rect)
pdf_painter.end()
そして、結果の PDF にはアクティブなハイパーリンクが含まれています。これが、すべてのメカニズムがそこにあると私に思わせる理由です。PDF ではなく HTML でエクスポートする方法が見つかりません。