tags:

views:

404

answers:

2

Hi all, 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?

A: 

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

Liz Albin
+1  A: 

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?

Bill
I'm writing a program to help people to read another language (Greek) and each word has different grammatical information (such as "Verb, Indicative, Active, 3rd Person, Singular") which I would like to display when the mouse is moved over each word.
j3frea
Ah, that makes more sense then. One problem with my example is that each block is displayed as its own line. I don't have enough experience with `QTextBlock`s to know how to get them on the same line. Good luck!
Bill