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

问题描述 投票:0回答:5

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

如您所见,第一个

QTableVIew
标题并不占据 100% 的宽度。事实上,字段右侧有一个小的垂直空白区域
size

如何让标题占据

QTableView
宽度的 100%?

qt qtableview
5个回答
56
投票

如果您使用的是 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);
}

26
投票

使用

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

此外,使用

view->horizontalHeader()->setResizeMode(QHeaderView::Stretch)
使各列具有相同的宽度。


16
投票

此处仅适用于:

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

我正在使用 Qt 5.2!


0
投票

我很难在表格的所有单元格之间分配列宽。就我而言,在模型的 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.
  }
}

0
投票

如果这里有人像我一样是 PyQt 的新手,并且真的很难理解如何使用

QTableWidget
在 Python 中执行此操作。这是一个带有
pyqt5
的示例。

table = QTableWidget()
header_view = QHeaderView(QtCore.Qt.Orientation.Horizontal, table)
header_view.setSectionResizeMode(QHeaderView.ResizeMode.Stretch)
table.setHorizontalHeader(header_view)
© www.soinside.com 2019 - 2024. All rights reserved.