Como faço para usar QTextBlock?
Pergunta
Eu sou completamente novo para C ++ e Qt.
Quero preencher um objeto QTextEdit
com QTextBlocks
, como posso fazer isso?
ex Se eu tiver a frase "os peixes estão chegando" Como eu poderia colocar cada palavra em sua própria QTextBlock
e adicionar esse bloco para QTextEdit
, ou ter eu não entendi como QTextBlock
realmente funciona?
Solução
QTextEdit
vai deixar você adicionar seus conteúdos através de um QString
:
QTextEdit myEdit("the fish are coming");
Ele também permite que você use um QTextDocument
, que detém blocos de texto.
O QTextDocument
em si também pode aceitar uma QString
:
QTextEdit myEdit;
QTextDocument* myDocument = new QTextDocument("the fish are coming", &myEdit);
myEdit.setDocument(myDocument);
No entanto, "Se você precisa criar um novo bloco de texto ou modificar o conteúdo de um documento ao examinar seu conteúdo, use a interface baseada em cursor fornecido pelo QTextCursor
vez." (documentação Qt) (Note, eu adicionei as linhas QTextBlockFormat
para torná-lo explícito onde os blocos são.)
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();
Parece que um monte de esforço para passar para mim. você pode dar qualquer informação adicional sobre por que você acha que precisa usar QTextBlock
s?
Outras dicas
Mantenha-os na mesma linha usando insertText sem usar insertBlock entre.
Por exemplo, quando eu tentei
cursor.insertText("I will try ", textFormat);
cursor.insertText("this for you.", textFormat);
para você, as palavras todos apareceram na mesma linha.
insertBlock insere um parágrafo.