Question

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 have the sentence "the fish are coming" how would I put each word into its own QTextBlock and add that block to QTextEdit, or have I misunderstood how QTextBlock actually works?

Was it helpful?

Solution

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?

OTHER TIPS

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.

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top