Как использовать QTextBlock?

Я совершенно новичок в C++ и Qt.

Я хочу заполнить объект QTextEdit QTextBlocks, как мне это сделать?

например, Если у меня есть предложение "рыба идет", как мне поместить каждое слово в свой собственный QTextBlock и добавить этот блок в QTextEdit, или я неправильно понял, как на самом деле работает QTextBlock?


person jcuenod    schedule 04.12.2009    source источник


Ответы (3)


QTextEdit позволит вам добавить содержимое через QString:

QTextEdit myEdit("the fish are coming");

Это также позволяет вам использовать QTextDocument, который содержит блоки текста. Сам QTextDocument также может принимать QString:

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

Однако «если вам нужно создать новый текстовый блок или изменить содержимое документа при просмотре его содержимого, вместо этого используйте интерфейс на основе курсора, предоставляемый QTextCursor». (документация Qt) (обратите внимание, я добавил QTextBlockFormat строк, чтобы было ясно, где блоки являются.)

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();

Кажется, что мне предстоит пройти через много усилий. Можете ли вы дать дополнительную информацию о том, почему вы считаете, что вам нужно использовать QTextBlocks?

person Bill    schedule 04.12.2009
comment
Я пишу программу, чтобы помочь людям читать другой язык (греческий), и каждое слово имеет различную грамматическую информацию (например, глагол, изъявительный падеж, активный, третье лицо, единственное число), которую я хотел бы отображать при наведении мыши на каждый слово. - person jcuenod; 05.12.2009
comment
А, тогда это имеет больше смысла. Одна проблема с моим примером заключается в том, что каждый блок отображается как отдельная строка. У меня недостаточно опыта работы с QTextBlock, чтобы знать, как разместить их в одной строке. Удачи! - person Bill; 07.12.2009

Держите их в одной строке, используя insertText без использования insertBlock между ними.

Например, когда я пытался

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

для вас все слова появились в одной строке.

insertBlock вставляет абзац.

person David Peterson Harvey    schedule 26.02.2013
comment
Есть ли способ сделать это с несколькими QTextBlocks? Насколько я понимаю, это создает несколько фрагментов в одном QTextBlock. - person ibizaman; 17.07.2013

Вы должны проверить документацию здесь

Вы можете присвоить свою строку QString, а затем добавить ее в QTextEdit, или вы можете проанализировать QString с помощью section(), см. здесь

person Liz Albin    schedule 04.12.2009