2009-12-04 7 views
6

Soy completamente nuevo en C++ y Qt.¿Cómo uso QTextBlock?

Quiero llenar un objeto QTextEdit con QTextBlocks, ¿cómo puedo hacer eso?

p. Si tengo la frase "los peces están llegando", ¿cómo podría poner cada palabra en su propio QTextBlock y agregar ese bloque a QTextEdit, o he entendido mal cómo funciona realmente QTextBlock?

Respuesta

10

QTextEdit le permitirá añadir sus contenidos a través de un QString:

QTextEdit myEdit("the fish are coming"); 

también permite el uso de un QTextDocument, que tiene bloques de texto. El QTextDocument en sí también puede aceptar una QString:

QTextEdit myEdit; 
QTextDocument* myDocument = new QTextDocument("the fish are coming", &myEdit); 
myEdit.setDocument(myDocument); 

Sin embargo, "Si es necesario crear un nuevo bloque de texto o modificar el contenido de un documento mientras se examina su contenido, utilizar la interfaz basada en cursor proporcionada por QTextCursor en su lugar ". (Qt documentation) (Nota, he añadido las líneas QTextBlockFormat hacerlo explícito donde los bloques son.)

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 un gran esfuerzo para ir a través de mí. ¿Puede darnos información adicional sobre por qué cree que necesita usar QTextBlock s?

+0

Estoy escribiendo un programa para ayudar a las personas a leer otro idioma (griego) y cada palabra tiene información gramatical diferente (como "Verbo, Indicativo, Activo, Tercera Persona, Singular") que me gustaría mostrar cuando el mouse se mueve sobre cada palabra. – jcuenod

+0

Ah, eso tiene más sentido entonces. Un problema con mi ejemplo es que cada bloque se muestra como su propia línea. No tengo suficiente experiencia con 'QTextBlock's para saber cómo ponerlos en la misma línea. ¡Buena suerte! – Bill

0

Usted debe verificar la documentación here

Se podría asignar su cadena a un QString y luego añadir que a la QTextEdit, o se puede analizar la sección QString usando() ver here

1

Manténgalos en la misma línea usando insertText sin usar insertBlock entre.

Por ejemplo, cuando traté

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

para usted, todas las palabras aparecieron en la misma línea.

insertBlock inserta un párrafo.

+0

¿Hay alguna manera de hacer esto con múltiples QTextBlocks? Según lo entiendo, esto crea múltiples fragmentos en un QTextBlock. – ibizaman