Я имел дело с той же проблемой и подправил предыдущие ответы, чтобы получить правильный рабочий код.
Сначала мы получаем поля содержимого от QTableWidget
.Если вы просто хотите отрегулировать его ширину, вам нужно только отключить горизонтальную полосу прокрутки .:
int w = 0, h = 0;
ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
w += ui->tableWidget->contentsMargins().left()
+ ui->tableWidget->contentsMargins().right();
h += ui->tableWidget->contentsMargins().top()
+ ui->tableWidget->contentsMargins().bottom();
Затем мы добавляем ширину вертикального заголовка к w
.Вертикальный заголовок - это специальный столбец, который содержит индексы строк и включен по умолчанию.мы также добавляем высоту горизонтального заголовка к h
.Горизонтальный заголовок - это специальная строка, содержащая заголовки столбцов.
w += ui->tableWidget->verticalHeader()->width();
h += ui->tableWidget->horizontalHeader()->height();
Затем мы добавляем ширину каждого столбца к w
, а высоту каждой строки к h
.
for (int i=0; i<ui->tableWidget->columnCount(); ++i)
w += ui->tableWidget->columnWidth(i);
for (int i=0; i<ui->tableWidget->rowCount(); ++i)
h += ui->tableWidget->rowHeight(i);
Теперь, если w
или h
слишком велики, чтобы поместиться на окне, мы уменьшаем их до ui->centralWidget->contentsRect()
.
if (w > ui->centralWidget->contentsRect().width())
w = ui->centralWidget->contentsRect().width();
if (h > ui->centralWidget->contentsRect().height())
h = ui->centralWidget->contentsRect().height();
К сожалению, я не знаю лучшего способаприменения w
и h
для установки ширины и высоты QTableWidget
.Если я использую:
ui->tableWidget->setMinimumWidth(w);
ui->tableWidget->setMaximumWidth(w);
ui->tableWidget->setMinimumHeight(h);
ui->tableWidget->setMaximumHeight(h);
, тогда пользователь вообще не сможет изменить размер виджета.Я думаю, что нам нужно использовать какое-то ручное размещение.
Это может показаться немного не по теме, но если вы хотите, чтобы у вашей таблицы было более привлекательное представление, используйте эту команду, чтобы изменить размеры столбцов, чтобы соответствовать их данным:
ui->tableWidget->resizeColumnsToContents();