Как использовать QTextBlock?
я совершенно новичок в C++ и Qt.
Я хочу заполнить QTextEdit
объект QTextBlocks
, как мне это сделать?
например если бы у меня было предложение "рыба идет", как бы я поместил каждое слово в свое QTextBlock
и добавьте этот блок в QTextEdit
, или я неправильно понял, как QTextBlock
на самом деле работает?
3 ответов
QTextEdit
позволит вам добавить содержимое через QString
:
QTextEdit myEdit("the fish are coming");
он также позволяет использовать QTextDocument
, который содержит блоки текста.
The QTextDocument
сам также может принять QString
:
QTextEdit myEdit;
QTextDocument* myDocument = new QTextDocument("the fish are coming", &myEdit);
myEdit.setDocument(myDocument);
однако, " если вам нужно создать новый текстовый блок или изменить содержимое документа при изучении его содержимого, используйте интерфейс на основе курсора, предоставляемый ."(документации 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 вставляет абзац.