web-dev-qa-db-ja.com

QTableViewを取得して幅の100%を満たす方法は?

これが私のソフトウェアの印刷画面です。

ご覧のとおり、最初のQTableVIewヘッダーは幅の100%を占めません。実際、フィールドsizeの右側に小さな垂直の空白があります。

ヘッダーを取得してQTableViewの幅の100%を取得するにはどうすればよいですか?

25
user2429940

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

view->horizontalHeader()->setStretchLastSection(true)を使用して、最後の列を拡張して空きスペースを作ります。

さらに、view->horizontalHeader()->setResizeMode(QHeaderView::Stretch)を使用して、列に同じ幅を与えます。

19
Pavel Strakhov

以下でのみ使用します:

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

Qt 5.2を使用しています!

14
Dante

テーブルのすべてのセルに列幅を分配するのに苦労しました。私の場合、モデルの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
Matferib