9

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?

NG_
  • 6,895
  • 7
  • 45
  • 67
jcuenod
  • 55,835
  • 14
  • 65
  • 102

3 Answers3

14

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?

NG_
  • 6,895
  • 7
  • 45
  • 67
Bill
  • 14,257
  • 4
  • 43
  • 55
  • 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. – jcuenod Dec 05 '09 at 05:01
  • 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 Dec 07 '09 at 19:48
2

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.

  • Is there a way to do this with multiple QTextBlocks ? As I understand it, this creates multiple fragments in one QTextBlock. – ibizaman Jul 17 '13 at 15:38
0

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,479
  • 8
  • 8