Как я могу использовать QTextBlock? - PullRequest
7 голосов
/ 04 декабря 2009

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

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

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

Ответы [ 3 ]

11 голосов
/ 05 декабря 2009

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?

1 голос
/ 26 февраля 2013

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

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

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

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

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

0 голосов
/ 04 декабря 2009

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

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

...