Voici un écran d'impression de mon logiciel:
Comme vous pouvez le constater, les premiers en-têtes QTableVIew
ne prennent pas 100% de la largeur. En fait, il y a un petit espace blanc vertical à droite du champ size
.
Comment obtenir que les en-têtes prennent 100% de la largeur de la variable QTableView
?
Si vous utilisez Qt 5, QHeaderView::setResizeMode()
n'est plus disponible. Au lieu de cela, vous pouvez utiliser QHeaderView::setSectionResizeMode()
. Appelez-le simplement pour chaque colonne:
for (int c = 0; c < ui->tableView->horizontalHeader()->count(); ++c)
{
ui->tableView->horizontalHeader()->setSectionResizeMode(
c, QHeaderView::Stretch);
}
Utilisez view->horizontalHeader()->setStretchLastSection(true)
pour développer la dernière colonne afin de libérer de l'espace.
De plus, utilisez view->horizontalHeader()->setResizeMode(QHeaderView::Stretch)
pour donner aux colonnes la même largeur.
Ici fonctionne uniquement avec:
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
J'utilise Qt 5.2!
J'ai eu du mal à répartir la largeur des colonnes entre toutes les cellules d'un tableau. Dans mon cas, dans la fonction headerData du modèle, j’ai procédé comme suit (nécessite d’appeler resizeColumnsToContents () quelque part):
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.
}
}