Как получить QTableView для заполнения 100% ширины?
Вот экран печати моего программного обеспечения:
![]()
Как видите, первые заголовки QTableVIew
не занимают 100% ширины. На самом деле, справа от поля есть небольшое вертикальное пустое пространство size
.
Как я могу заставить заголовки брать 100% ширины 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);
}
Ответ 2
Используйте view->horizontalHeader()->setStretchLastSection(true)
, чтобы последний столбец расширялся до свободного места.
Кроме того, используйте view->horizontalHeader()->setResizeMode(QHeaderView::Stretch)
, чтобы дать столбцам ту же ширину.
Ответ 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.
}
}