2012-01-24 27 views
5

Soy un programador de estudiantes y estoy usando Qt para construir una interfaz GUI para el trabajo. Tengo un QTreeWidget que tiene un total de 8 columnas. La entrada que debe ingresarse en cada una de estas columnas es bastante pequeña. En ese sentido, estaba tratando de encontrar una forma de volver a clasificar según el tamaño todas las columnas a la menor cantidad de espacio requerido. muy parecido a la acción que se realiza al hacer clic en los separadores. Revisé varios sitios web y la documentación de Qt y no encontré una solución. Después de revisar la documentación, parece que hay muchas formas de hacerlo, pero no puedo hacer que funcione uno. Estoy empezando a pensar que necesito activar/desactivar algo en alguna parte. Es como si los cambios que escribo en mi función de compilación (Esta función borra la tabla; Lee datos de mi vector, muestra ciertos datos en la tabla, y luego se supone que debe cambiar el tamaño de los encabezados/columnas al tamaño suficiente para ajustarse el contenido de la columna) ni siquiera se aplican. He intentado lo siguiente sin cambios:Cómo cambiar el tamaño de columnas en QTreeWidget al espacio mínimo requerido

 ui->treeWidgetInjections->setColumnWidth(i, minimumWidth()); 
     ui->treeWidgetInjections->resizeColumnToContents(i); 
     ui->treeWidgetInjections->header()->ResizeToContents; 
     ui->treeWidgetInjections->header()->resizeSection(i, minimumWidth()); 

Todos estos son en el final de mi función build (información no relacionada eliminado):

ui->treeWidgetInjections->clear(); 
    for (int i=0; i < qTreeInjectionData.size(); i++) 
     { 
      //fill Qtree with items; 
      //fill QTree items with data; 
      //re size function here; 
     } 

favor solamente deje voto productiva, ya que sólo soy interesado en aprender y superar este desafío. ¡Gracias por adelantado!

+0

Creo que mi bucle for es la cuestión aquí; en particular, creo que .size podría haber sido responsable de este problema. –

Respuesta

14

Este mínima ejemplo funciona para mí:

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 

    QVBoxLayout *layout = new QVBoxLayout(centralWidget()); 
    QTreeWidget *tree = new QTreeWidget(this); 
    layout->addWidget(tree); 

    tree->setColumnCount(3); 

    QStringList first, second, third; 
    first << "xxxxxxxxx"  << "xxxxxxxxxxxxx"  << "xxxxxxxx"; 
    second << "xxxxx"   << "xxxxxxxxxxxxxxxxx" << "xxxxx"; 
    third << "xxxxxxxxxxxxxx" << "xxxxxxxxxx"  << "xxxxxxxx"; 

    tree->insertTopLevelItem(0, new QTreeWidgetItem(first)); 
    tree->insertTopLevelItem(0, new QTreeWidgetItem(second)); 
    tree->insertTopLevelItem(0, new QTreeWidgetItem(third)); 

    for(int i = 0; i < 3; i++) 
     tree->resizeColumnToContents(i); 
} 

Todo lo que necesita hacer es llamar al método resizeColumnToContents() una vez para cada columna Después de llenar la vista. Avíseme si el problema persiste.

+0

Es realmente extraño, pero cuando creé un bucle for en mi función de compilación para los tamaños de columna, funcionó bien ... muy extraño. ¡GRACIAS POR TU AYUDA! ¡Tu ejemplo me ayudó mucho y estoy seguro de que esto ayudará a otros! –

+1

Lamentablemente, este método solo cambia el tamaño de acuerdo con el contenido del encabezado para mí. Los datos se muestran envueltos en palabras. –

2

El problema para mí fue que StretchLastSection se estableció en verdadero y si este valor se establece en verdadero, esta propiedad anulará el modo de cambio de tamaño establecido en la última sección del encabezado.

Solución:

_treeWidget = new UIWidgetSceneTree(); 
_treeWidget->header()->setStretchLastSection(false); 
_treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents); 
Cuestiones relacionadas