2012-09-04 20 views
8

Tengo una etiqueta que a veces contiene un texto largo sin espacios (ruta en la computadora).QLabel word wrap mode

Así que la envoltura de wrod lo envuelve muy raro.

¿Hay alguna manera de hacer un ajuste de palabras de la etiqueta que se rompa en medio de la palabra o no solo en espacios en blanco?

Respuesta

4

Una forma es usar la clase QTextOption con un QTextDocument en lugar de una QLabel. Esto le permite usar QTextOption::WrapMode. QTextOption :: WrapAtWordBoundaryOrAnywhere debe hacer lo que quiera.

+1

Esto es inaceptable ya que QTextEdit/QTextBrowser no se ajusta a los contenidos. – chacham15

+0

¿Encajar dentro del contenido? No veo tal solicitud en la pregunta. –

+0

Tiene razón, pero ese es el comportamiento predeterminado con QLabel y no con QTextEdit. Además, no es fácil hacer que QTextEdit tenga ese comportamiento. – chacham15

5

Esto no es elegante, pero hace el trabajo ...
Así que decir tiene clase de cabecera privada:

QLabel *thisLabel; 
QString *pathName; 
QString *pathNameClean; 

y por supuesto la definición thisLabel en algún lugar. por lo que sería mejor si estuviera este sencillo ....

thisLabel->setWordWrap(true); 

que está bien si y sólo si la palabra tiene puntos de ruptura ( qué rutas deben evitar)

así que mantenga su trayectoria real en una cadena separada si la necesita para propósitos de QFile más adelante. A continuación, defina manualmente un personaje por el número de línea, e insertar los espacios en la cadena .... por lo que vamos a decir 50 caracteres es un buen ancho ...

pathNameClean = new QString(pathName); 

    int c = pathName->length(); 

    if(c > 50) 
    { 
     for(int i = 1; i <= c/50; i++) 
     { 
      int n = i * 50; 
      pathName->insert(n, " "); 
     } 
    } 
    thisLabel->setText(pathName); 

Shazam .... WordWrap simulada sin espacios originales ...

Recuerde que la cadena pathName ahora es solo para fines bonitos de QLabel y que la cadena pathNameClean es la ruta real. Los programas de Qt se bloquean si intenta abrir un archivo con un espacio de ruta inyectada .....

(si no hay un método de clase simple, es probable que solo unas pocas líneas de código ... y por qué resolver problemas es la mejor herramienta de programadores!)