I am trying to use Qt for creating a WYSIWYG word processor, focusing mainly on the layout of pages and pagination of a document.
The first thing I'm trying to focus on is a printing preview feature and I thought I would use a QGraphicsScene/View along with a QGraphicsTextItem.
The current problem is that I am unable to contain the text within the confines of the QGraphicsTextItem. The text keeps going until it hits the bottom of the QGraphicsScene/View.
I am wondering if using QGraphics is the correct way to go about it and if so, what should I do to get pagination for my text document?
Code (PyQt, but I should be able to understand C++ even though Python is preferred) for producing the result showed in the attached picture:
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*