Как я могу использовать QTextBlock?
Я совершенно новичок в C++ и Qt.
Я хочу заселить QTextEdit
объект с QTextBlocks
, как я это сделал?
Например, если у меня есть предложение "рыба идет", как бы я поместил каждое слово в свое QTextBlock
и добавить этот блок в QTextEdit
или я неправильно понял, как QTextBlock
на самом деле работает?
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();
Похоже, много усилий, чтобы пройти ко мне. Можете ли вы дать дополнительную информацию о том, почему вы чувствуете, что вам нужно использовать QTextBlock
s?
Держите их в одной строке, используя insertText без использования insertBlock между ними.
Например, когда я пытался
cursor.insertText("I will try ", textFormat);
cursor.insertText("this for you.", textFormat);
для вас слова все появились в одной строке.
insertBlock вставляет абзац.