Как получить QTableView для заполнения 100% ширины?

Вот экран печати моего программного обеспечения:

Как видите, первые заголовки QTableVIew не занимают 100% ширины. На самом деле, справа от поля есть небольшое вертикальное пустое пространство size.

Как я могу заставить заголовки брать 100% ширины QTableView?

Ответы

Ответ 1

Если вы используете Qt 5, QHeaderView::setResizeMode() больше не доступен. Вместо этого вы можете использовать QHeaderView::setSectionResizeMode():

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

Или просто позвоните для каждого столбца:

for (int c = 0; c < ui->tableView->horizontalHeader()->count(); ++c)
{
    ui->tableView->horizontalHeader()->setSectionResizeMode(
        c, QHeaderView::Stretch);
}

Ответ 2

Используйте view->horizontalHeader()->setStretchLastSection(true), чтобы последний столбец расширялся до свободного места.

Кроме того, используйте view->horizontalHeader()->setResizeMode(QHeaderView::Stretch), чтобы дать столбцам ту же ширину.

Ответ 3

Здесь работает только с:

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

Я использую Qt 5.2!

Ответ 4

Мне было трудно распределить ширину столбцов среди всех ячеек таблицы. В моем случае в функции headerData модели я сделал следующее (требуется вызвать resizeColumnsToContents() где-нибудь):

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