How do I use QTextBlock?

前端 未结 3 803
夕颜
夕颜 2021-01-02 10:31

I\'m completely new to C++ and Qt.

I want to populate a QTextEdit object with QTextBlocks, how do I do that?

e.g. If I hav

相关标签:
3条回答
  • 2021-01-02 11:17

    QTextEdit will let you add your contents via a QString:

    QTextEdit myEdit("the fish are coming");
    

    It also allows you to use a QTextDocument, which holds blocks of text. The QTextDocument itself also can accept a QString:

    QTextEdit myEdit;
    QTextDocument* myDocument = new QTextDocument("the fish are coming", &myEdit);
    myEdit.setDocument(myDocument);
    

    However, "If you need to create a new text block, or modify the contents of a document while examining its contents, use the cursor-based interface provided by QTextCursor instead." (Qt documentation) (Note, I added the QTextBlockFormat lines to make it explicit where the blocks are.)

    QTextEdit myEdit;
    QTextDocument* myDocument = new QTextDocument(&myEdit);
    myEdit.setDocument(myDocument);
    QTextCursor* myCursor = new QTextCursor(myDocument);
    
    QTextBlockFormat format;
    format.setBackground(Qt::red);
    myCursor->setBlockFormat(format);
    
    myCursor->insertText("the ");
    
    format.setBackground(Qt::green);
    myCursor->insertBlock(format);
    myCursor->insertText("fish ");
    
    format.setBackground(Qt::yellow);
    myCursor->insertBlock(format);
    myCursor->insertText("are ");
    
    format.setBackground(Qt::red);
    myCursor->insertBlock(format);
    myCursor->insertText("coming!");
    
    format.setBackground(Qt::green);
    myCursor->insertBlock(format);
    myCursor->insertText(QString(%1 blocks").arg(myDocument->blockCount()));
    myEdit.show();
    

    Seems like a lot of effort to go through to me. Can you give any additional information on why you feel you need to use QTextBlocks?

    0 讨论(0)
  • 2021-01-02 11:20

    You should check the documentation here

    You could assign your string to a QString and then add that to the QTextEdit, or you could parse the QString using section() see here

    0 讨论(0)
  • 2021-01-02 11:27

    Keep them on the same line by using insertText without using insertBlock between.

    For instance, when I tried

    cursor.insertText("I will try ", textFormat);
    cursor.insertText("this for you.", textFormat);
    

    for you, the words all appeared on the same line.

    insertBlock inserts a paragraph.

    0 讨论(0)
提交回复
热议问题