Что вы можете сделать, так это рассчитать ширину столбцов табличного представления в соответствии с имеющимися у них данными (или вы можете просто вызвать resizeColumnToContents для каждого столбца, чтобы определить его размер в соответствии с его содержимым). Затем измените ширину табличного представления, чтобы быть равной или больше, чем общая ширина столбцов + вертикальный заголовок, если показано. Вам также необходимо отслеживать изменения модели и корректировать ширину табличного вида +, если отображается горизонтальный заголовок, вы можете отслеживать события изменения размера столбцов и заново их корректировать. Ниже приведен пример кода для этого:
инициализация:
// add 3 columns to the tableview control
tableModel->insertColumn(0, QModelIndex());
tableModel->insertColumn(1, QModelIndex());
tableModel->insertColumn(2, QModelIndex());
...
// switch off horizonatal scrollbar; though this is not really needed here
ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// adjust size; see code below
adjustTableSize();
// connect to the horizontal header resize event (non needed if header is not shown)
connect(ui->tableView->horizontalHeader(),SIGNAL(sectionResized(int,int,int)), this,
SLOT(updateSectionWidth(int,int,int)));
// connect to the model's datachange event
connect(ui->tableView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
this, SLOT(dataChanged(QModelIndex,QModelIndex)));
настроить размер таблицы:
void MainWindow::adjustTableSize()
{
ui->tableView->resizeColumnToContents(0);
ui->tableView->resizeColumnToContents(1);
ui->tableView->resizeColumnToContents(2);
QRect rect = ui->tableView->geometry();
rect.setWidth(2 + ui->tableView->verticalHeader()->width() +
ui->tableView->columnWidth(0) + ui->tableView->columnWidth(1) + ui->tableView->columnWidth(2));
ui->tableView->setGeometry(rect);
}
изменение модели процесса
void MainWindow::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
adjustTableSize();
}
изменить размер горизонтального заголовка
void MainWindow::updateSectionWidth(int logicalIndex, int, int newSize)
{
adjustTableSize();
}
надеюсь, это поможет, с уважением