Paginating a QTextEdit



  • I am making something akin to a Word clone. As such I need a text area that displays pages as I type. The more research I do into this, the more I believe that it is impossible in Qt. Here is what I have looked at so far:

    • QTextEdit - As far as I can tell, if I want to do any sort of typing in Qt, I need to have one of these in my app.
    • QTextDocument - Everyone I talk to seems to say I do pagination with one of these. QTextEdit can give me one, but the one it returns always has a page count of one. From reading the documentation, it seems like it actually only does pagination when I try to print said document.
    • QTextFrame, QCursor, QScrollWidget, and many others - I feel like I've combed the entire documentation, and seen no way to actually paginate a QTextEdit. The closest I got was creating multiple QTextEdits and on text change try to redistribute the text. But this caused all kinds of problems because of the way QTextEdits paintEvent function seems to work.

    Please help, in my mind this seems like it should be so simple, but everything I've tried leads to a deadend.

    Note: This is my first time ever really using Qt, and I'm coding in Ruby.



  • Hi Icco,

    QTextEdit internally still uses the QTextDocument. There is a ready demo in Qt installation called TextEdit, that is a good place to start ...qt/demos/textedit

    Are you trying to show page separators?



  • Yes, the main thing I am trying to do is show page separation in a QTextEdit. I'll check out that demo, thanks.



  • If you want like the page layout in word, one way I see is ...
    using QGraphicsView, setting the scene, setting multiple QGraphicsTextItems which are editable, and updating the entire text on any edits.. you can set QTextDocument to these text items ..

    Something similar is also available if you refer the QPrintPreviewWidget source



  • Oh that is cool. Thanks.

    I'm finding the scene documentation kind of confusing. How do I create GraphicsItems in the correct places? Right now when I add things to the scene, they all just stack in the center. Then when I setPos, they get put in weird places.



  • To learn QGraphicsView, a very good example is the chips demo that ships with Qt ...

    You create a QGraphicsView, then create a QGraphicsScene, create and add QGraphicsItems to the scene (text item, or pixmap item), set position and z order if required for each of these graphics items and set the scene to the view.. that's basically about it. Read up the API in the assistant for full set of capabilities ...



  • Hi Icco,

    Could you perhaps show how you managed to solve this? On StackExchange you say you have something that works (linking to this topic), but I don't see an easy way to get each of the QGraphicsTextItems showing the right part of the document. Would be cool to see how this can be done.

    Thanks



  • Hi Andre.

    Check my implementation of paginated QTextEdit https://github.com/dimkanovikov/PagesTextEdit



  • Hello. I read your post with your implentation of qtextedit which is layouted like word. I have question. How can i add Actions, menus and toolbars to the window? I think you can do this only with QMainWindow. Please help me, thanks. Henrik


  • Qt Champions 2016

    @HenrikSt. said:

    Hi and welcome

    You can just insert his PagesTextEdit widget into a QMainwindow and have
    menus and toolbar.



  • How i can do that? Please leave a example. Thank you


  • Qt Champions 2016

    @HenrikSt.

    hi
    Make a new default Qt Gui project
    includes the .cpp files and .h files for PagesTextEdit (copy to project folder)

    Then in Mainwindow constructor ( ask if u dont know what constructor is)
    you create it and place it as central

    setCentralWidget( new PagesTextEdit )

    You will need to know some c++ to get this working. :)



  • I can't follow since step 3. Then in mainwindow constructor.. where is it?


  • Qt Champions 2016

    @HenrikSt.
    in mainwindow.cpp

    MainWindow::MainWindow(QWidget* parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow) {
    ui->setupUi(this);
    ---> your code here



  • This post is deleted!

Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.