如何让QTableView填充100%的宽度?

时间:2013-07-08 20:37:41

标签: qt qtableview

这是我的软件的打印屏幕:

如您所见,第一个QTableVIew标题不占用宽度的100%。实际上,字段size右侧有一个小的垂直空白区域。

如何让标题占据QTableView的宽度的100%?

4 个答案:

答案 0 :(得分:34)

如果您使用的是Qt 5,QHeaderView::setResizeMode()将不再可用。相反,您可以使用QHeaderView::setSectionResizeMode()。只需为每一列调用它:

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

答案 1 :(得分:18)

使用view->horizontalHeader()->setStretchLastSection(true)将最后一列扩展为可用空间。

此外,使用view->horizontalHeader()->setResizeMode(QHeaderView::Stretch)为列提供相同的宽度。

答案 2 :(得分:13)

此处仅适用于:

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

我正在使用Qt 5.2!

答案 3 :(得分:0)

我很难在表格的所有单元格中分配列宽。在我的例子中,在模型的headerData函数中,我做了以下(需要在某处调用enter image description here()):

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