2

主にページのレイアウトとドキュメントのページ付けに焦点を当てて、WYSIWYGワードプロセッサを作成するためにQtを使用しようとしています。

私が最初に焦点を当てようとしているのは、印刷プレビュー機能であり、QGraphicsTextItem と共に QGraphicsScene/View を使用すると考えました。

現在の問題は、QGraphicsTextItem の範囲内にテキストを含めることができないことです。テキストは、QGraphicsScene/View の一番下に到達するまで続きます。プレビュー

QGraphics を使用することが正しい方法であるかどうか疑問に思っています。そうであれば、テキスト ドキュメントのページネーションを取得するにはどうすればよいですか?

添付の図に示す結果を生成するためのコード (PyQt、ただし、Python が優先されますが、C++ を理解できるはずです):

import sys

from PyQt4.QtGui import \
QApplication, \
QDialog, \
QGraphicsScene, \
QGraphicsView, \
QVBoxLayout, \
QPainter

from PyQt4.QtCore import \
QRectF, \
Qt


class GraphicsView(QGraphicsView):
    def __init__(self, fname='', parent=None):
        super(GraphicsView, self).__init__(parent)
        self.setDragMode(QGraphicsView.RubberBandDrag)
        self.setRenderHint(QPainter.Antialiasing)
        self.setRenderHint(QPainter.TextAntialiasing)

    def wheelEvent(self, event):
        factor = 1.41 ** (-event.delta() / 240.0)
        self.scale(factor, factor)


class Editor(QDialog):

    def __init__(self, parent=None):
        super(Editor, self).__init__(parent)

        pageSize = (842, 198)
        f = open('alotbsol.txt')
        txt = f.read()

        view = GraphicsView()
        scene = QGraphicsScene(self)
        scene.setSceneRect(0, 0, pageSize[0], pageSize[1])
        rect = QRectF(0, 0, pageSize[0], pageSize[1])
        scene.addRect(rect, Qt.black)
        textbox = scene.addText(txt)
        textbox.setTextWidth(pageSize[0])
        view.setScene(scene)

        layout = QVBoxLayout()
        layout.addWidget(view, 1)
        self.setLayout(layout)

        self.resize(scene.width() + 50, scene.height() * 2)


if __name__ == "__main__":
    app = QApplication(sys.argv)
    widget = Editor()
    widget.show()
    app.exec_()*emphasized text*
4

1 に答える 1

1

Qt は、Scribe フレームワークによるリッチ テキスト処理をサポートしています。QTextDocumentこれは、構造化されたリッチ テキスト ドキュメントのコンテナである に基づいてい ます。Scribe フレームワークは、リッチ テキスト ドキュメントを読み取って操作するためのクラスで構成されています。テキスト ドキュメントの構造化表現の詳細については、こちらを参照してください。

印刷時にドキュメントのページ付けを行うには、テキストを HTML に変換しQTextDocument、Qt のリッチ テキスト エンジンを使用してレンダリングできます。描画と改ページは手動で実行できますが、ドキュメントを HTML に変換し、それを使用QTextDocumentして印刷する方法は、レポートやその他の複雑なドキュメントを印刷するための最も便利な代替手段です。

void Dialog::Print(QString myText)
{

    QPrinter printer;

    QString html = QString("<P>%1</P>").arg(myText);

    QPrintDialog printDialog(&printer, this);
    if (printDialog.exec()) {
        textDocument.setHtml(html);

        QPrintPreviewDialog preview(&printer, this);
        preview.setWindowFlags ( Qt::Window );
        connect(&preview, SIGNAL(paintRequested(QPrinter *)), SLOT(printPreview(QPrinter *)));
        preview.exec();
    }

}

void Dialog::printPreview(QPrinter * printer)
{
    textDocument.print(printer);
}
于 2014-08-04T14:19:19.250 に答える