これが私のソフトウェアの印刷画面です。
ご覧のとおり、最初のQTableVIew
ヘッダーは幅の100%を占めません。実際、フィールドsize
の右側に小さな垂直の空白があります。
ヘッダーを取得してQTableView
の幅の100%を取得するにはどうすればよいですか?
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);
}
view->horizontalHeader()->setStretchLastSection(true)
を使用して、最後の列を拡張して空きスペースを作ります。
さらに、view->horizontalHeader()->setResizeMode(QHeaderView::Stretch)
を使用して、列に同じ幅を与えます。
以下でのみ使用します:
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
Qt 5.2を使用しています!
テーブルのすべてのセルに列幅を分配するのに苦労しました。私の場合、モデルの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.
}
}