web-dev-qa-db-fra.com

Comment obtenir un QTableView pour remplir 100% de la largeur?

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?

23
user2429940

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);
}
34
user362638

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.

17
Pavel Strakhov

Ici fonctionne uniquement avec:

ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

J'utilise Qt 5.2!

12
Dante

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.
  }
}
0
Matferib