example - ¿Cómo hacer que un QTableView llene el 100% del ancho?
qtablewidget 5 (4)
Aquí hay una pantalla de impresión de mi software:
Como puede ver, los primeros encabezados de QTableVIew
no toman el 100% del ancho. De hecho, hay un pequeño espacio en blanco vertical a la derecha del size
campo.
¿Cómo puedo hacer que los encabezados tomen el 100% del ancho del QTableView
?
Aquí funciona usando solo con:
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
Estoy usando Qt 5.2!
Me costó mucho distribuir los anchos de columna entre todas las celdas de una tabla. En mi caso, en la función headerData del modelo, hice lo siguiente (requiere llamar a resizeColumnsToContents () en algún lugar):
QVariant headerData(int section, Qt::Orientation orientation, int role) const override {
if (orientation == Qt::Vertical) {
return QVariant();
}
if (role == Qt::SizeHintRole) {
auto* p = qobject_cast<QTableView*>(QObject::parent());
if (p == nullptr) return QVariant();
// Parent total width.
const int w = p->viewport()->size().width() -
p->verticalScrollBar()->sizeHint().width();
QSize qs;
// Default height.
qs.setHeight(p->verticalHeader()->defaultSectionSize());
// Width per column.
switch (section) {
case 0:
qs.setWidth(w * 0.45);
return QVariant(qs);
case 1:
qs.setWidth(w * 0.45);
return QVariant(qs);
// ... others
default: ;
}
return QVariant();
}
if (role == Qt::DisplayRole) {
// header titles.
}
}
Si está utilizando Qt 5, QHeaderView::setResizeMode()
ya no está disponible. En su lugar, puede usar QHeaderView::setSectionResizeMode()
. Solo llámalo para cada columna:
for (int c = 0; c < ui->tableView->horizontalHeader()->count(); ++c)
{
ui->tableView->horizontalHeader()->setSectionResizeMode(
c, QHeaderView::Stretch);
}
Use view->horizontalHeader()->setStretchLastSection(true)
para hacer que la última columna se expanda al espacio libre.
Además, use view->horizontalHeader()->setResizeMode(QHeaderView::Stretch)
para dar a las columnas el mismo ancho.