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?

Foi útil?

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 QTextBlocks?

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.

Você deve verificar a documentação aqui

Você pode atribuir a sua string para um QString e, em seguida, acrescentar que a QTextEdit, ou você pode analisar a secção QString usando () ver aqui

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top