【问题标题】:How to get a QTableView to fill 100% of the width?如何让 QTableView 填充 100% 的宽度?
【发布时间】:2013-07-06 07:29:39
【问题描述】:

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

如您所见,第一个 QTableVIew 标头不会占用 100% 的宽度。其实在size这个字段的右边有一个小的垂直空白。

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

【问题讨论】:

标签: qt 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);
}

【讨论】:

  • 同样的问题,还是不行。最后一节被拉伸,但不是第一个。
  • 这对我来说适用于 Qt 5.1。在使用此代码设置部分调整大小模式之前,您是否将模型设置为 tableview?如果你还没有,那么你还没有任何列,这段代码什么也不做。
  • 不要为每一列调用QHeaderView::setSectionResizeMode()要自动将传递的拉伸应用于所有列,只需迭代地调用该方法一次传递明确的列索引:例如,ui-&gt;tableView-&gt;horizontalHeader()-&gt;setSectionResizeMode(QHeaderView::Stretch);。上面的for 循环因此简化为一个简单的单行。另请参阅this relevant answer
  • Stretch 用于setSectionResizeMode() 后不能调整宽度,可以吗?
【解决方案2】:

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

此外,使用view-&gt;horizontalHeader()-&gt;setResizeMode(QHeaderView::Stretch) 使列具有相同的宽度。

【讨论】:

  • @user2429940 如果您使用的是 QtCreator/Designer,您可以在属性部分找到它
  • 第一个命令有效,但第二个无效。这意味着现在最后一列被拉伸,但两列的大小不同。
【解决方案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.
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-05
      • 2022-01-20
      • 2022-12-14
      • 2011-07-10
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 2017-08-06
      • 2014-07-10
      相关资源
      最近更新 更多