2011-03-10 27 views

Respuesta

12

Si utiliza QPlainTextEdit, algo como esto debe hacer el truco:

void SetHeight (QPlainTextEdit* edit, int nRows) 
    { 
    QFontMetrics m (edit -> font()) ; 
    int RowHeight = m.lineSpacing() ; 
    edit -> setFixedHeight (nRows * RowHeight) ; 
    } 

Es posible que desee añadir dos o tres píxeles como el margen; el experimento dirá.

+2

Esto ignora el margen y el borde del widget por lo que se corta la última línea. La cantidad de píxeles para agregar depende del tema en uso, por lo que es más complejo que esto. –

1

QTextEdit es un widget normal, por lo que puede usar la propiedad minimumHeight. Creo, sin embargo, que es realmente imposible establecer la altura mínima en función del número de líneas. Esto redimensionaría automágicamente el tamaño mínimo de un widget cada vez que cambie el tamaño de la fuente. Pero si conoce el tamaño de la fuente, puede establecer el tamaño mínimo utilizable de su widget.

+0

QTextEdit ha permitido zoom rueda del ratón por defecto, por lo que tendría que desactivar esta opción. – TonyK

2

Uso QFont para determinar la altura de una sola línea de texto en el QTextEdit (QTextEdit debe tener una fuente propiedad). Después de eso, multiplique el valor de QFontaltura con el número de líneas que desea mostrar y establezca la altura (mínima) del widget en ese valor.

+0

El problema con QTextEdit es que cada línea puede tener una altura diferente. Si solo necesita un formato de texto único (pero con diferentes colores permitidos), tal vez QPlainTextEdit sea mejor. – TonyK

0

Esto debería funcionar:

QTextEdit *myEdit = new QTextEdit(myContentString); 
QSize myEditSize = myEdit->document()->size().toSize(); 
myEditSize.setWidth(QWIDGETSIZE_MAX); 
myEdit->setMaximumSize(myEditSize); 
0

La mejora de la respuesta aceptada acerca QPlainTextEdit. Además de lineSpacing, el valor para setFixedHeight debe contener: 2 márgenes del subyacente QTextDocument, 2 anchos del marco y márgenes de contenido del widget. Además de eso, QFontMetrics debe obtenerse de una fuente del documento, no del widget en sí. Por lo tanto, la función hipotética setHeight debe decir lo siguiente:

void setHeight (QPlainTextEdit *ptxt, int nRows) 
{ 
    QTextDocument *pdoc = ptxt->document(); 
    QFontMetrics fm (pdoc->defaultFont()); 
    QMargins margins = ptxt->contentsMargins(); 
    int nHeight = fm.lineSpacing() * nRows + 
     (pdoc->documentMargin() + ptxt->frameWidth()) * 2 + 
     margins.top() + margins.bottom(); 
    ptxt->setFixedHeight (nHeight); 
} 
Cuestiones relacionadas