2012-04-20 20 views
10

Quiero establecer el espaciado entre líneas de un QTextEdit.Establecer espaciado entre líneas en QTextEdit

No es ningún problema para conseguir esa información con

QFontMetrics::lineSpacing(); 

Pero cómo configurar eso?

he intentado con hojas de estilo, pero eso no funcionó:

this->setStyleSheet("QTextEdit{ height: 200%; }"); 

o

this->setStyleSheet("QTextEdit{ line-height: 200%; }"); 

solución parcial:

Bueno, he encontrado una solución - no de la manera que yo quería, pero al menos es simple y da casi mi comportamiento previsto, suficiente para mi prueba de concepto.

En cada nueva línea, hay algunas líneas de separación. Pero si solo escribe hasta que el texto se ajuste automáticamente a una nueva línea, no tendrá espacio de línea entre estas dos líneas. Este truco solo funciona con bloques de texto, mira el código.

Solo tenga en cuenta que es fuerza bruta y un hack feo. Pero proporciona algún tipo de espacio de línea a su hermoso QTextEdit. Llámalo cada vez que tu texto cambie.

void setLineSpacing(int lineSpacing) { 
    int lineCount = 0; 
    for (QTextBlock block = this->document()->begin(); block.isValid(); 
      block = block.next(), ++lineCount) { 
     QTextCursor tc = QTextCursor(block); 
     QTextBlockFormat fmt = block.blockFormat(); 
     if (fmt.topMargin() != lineSpacing 
       || fmt.bottomMargin() != lineSpacing) { 
      fmt.setTopMargin(lineSpacing); 
      //fmt.setBottomMargin(lineSpacing); 
      tc.setBlockFormat(fmt); 
     } 
    } 
} 
+0

Aún así, una buena solución sería de gran interés. – qwc

Respuesta

4

Los QFontMetrics contiene (por el nombre) propiedades estáticas que provienen del archivo de fuente. Qué tan ancha es una "C" mayúscula, etc. lineSpacing() le permite obtener la distancia natural en un espacio que la persona que diseñó la fuente codificó en la fuente misma. Si realmente se quiere cambiar que (No) ... la historia algo complicada de lo que se cuenta aquí:

http://fontforge.sourceforge.net/faq.html#linespace

En cuanto a la separación de líneas en un QTextEdit ... parece (para mí) como el que se ve como una de las cosas que cae bajo el modelo de extensibilidad de Qt para especificar texto "diseños":

http://doc.qt.io/qt-4.8/richtext-layouts.html

se podría suministrar su propia clase de diseño para la QTextDocument en lugar de utilizar el valor por defecto . Alguien trató aquí, pero no publicó su código completo:

http://www.qtcentre.org/threads/4198-QTextEdit-with-custom-space-between-lines

+0

Demonios, ¿por qué no tropecé con eso? Lo intentaré de inmediato. :) – qwc

+0

Bien, dibujar texto estático es fácil. Pero lograr que el diseño sea un texto editable dentro del QTextEdit ronda algunas asperezas. – qwc

+0

No me sorprende. Puede intentar trabajar desde la fuente para el QTextLayout predeterminado para su versión de Qt, tal vez heredar de él y anular los bits que cree que necesita. En 4.7 fue: http://qt.gitorious.org/qt/qt/blobs/4.7/src/gui/text/qtextlayout.cpp – HostileFork

Cuestiones relacionadas