c++ - example - Las columnas se ajustan automáticamente al tamaño de QTableView
qtablewidget documentation (3)
Soy nuevo en QT y acabo de lograr que QTableView funcione con mi modelo. Se ha fijado 3 columnas. Cuando abro una ventana, se ve bien, pero cuando cambio el tamaño de la ventana, el QTableView se redimensiona pero el ancho de las columnas sigue siendo el mismo. ¿Hay alguna forma incorporada para hacer que funcione? Quiero que las columnas cambien de tamaño para que se ajusten a los bordes de QTableView cada vez que la ventana se redimensiona.
Este código extiende igualmente cada columna para que se ajuste al ancho de la tabla.
table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
Docs:
- QHeaderView::setSectionResizeMode
- Ver modos de cambio de tamaño here .
Hay un indicador de encabezado para garantizar que la última columna de QTableView rellene su padre principal si se redimensiona. Puedes configurarlo así:
table_view->horizontalHeader()->setStretchLastSection(true);
Sin embargo, eso no cambia el tamaño de las otras columnas proporcionalmente. Si también desea hacerlo, puede manejarlo dentro del resizeEvent de su padre de esta manera:
void QParent::resizeEvent(QResizeEvent *event) {
table_view->setColumnWidth(0, this->width()/3);
table_view->setColumnWidth(1, this->width()/3);
table_view->setColumnWidth(2, this->width()/3);
QMainWindow::resizeEvent(event);
}
La clase QParent es una subclase de QMainWindow.
Los widgets QTableView , QTreeView y sus clases derivadas (como QTableWidget ) tienen estos dos métodos útiles:
QHeaderView* horizontalHeader() const;
QHeaderView* verticalHeader() const;
Si abre documentación para una clase QHeaderView , encontrará métodos que configuran la apariencia y el comportamiento del encabezado de fila o columna para las vistas de elementos. Puede resolver su problema por uno de estos métodos:
void QHeaderView :: stretchLastSection (bool stretch)
Como lo mencionó Davy Jones .Ejemplo:
QTableView *table = new QTableView(); table->horizontalHeader()->setStretchLastSection(true);
void QHeaderView :: setResizeMode (modo ResizeMode)
Como modo , puede configurar QHeaderView :: Stretch o QHeaderView :: ResizeToContents.
Desafortunadamente, este método tiene un inconveniente: después de que se aplique, no podrá cambiar el tamaño de las columnas (o filas) de forma manual (en GUI) o mediante programación.Ejemplo:
QTableView *table = new QTableView(); table->horizontalHeader()->setResizeMode(QHeaderView::Stretch);