Was du tun könntest, ist die Breiten deiner TableView-Spalten entsprechend der Daten zu berechnen (oder du kannst einfach resizeColumnToContents für jede Spalte aufrufen, um sie an ihren Inhalt anzupassen). Ändere dann die TableView-Breite so, dass sie gleich oder größer als die Gesamtbreite der Spalten + vertikaler Header ist, falls angezeigt. Du müsstest auch Änderungen am Modell verfolgen und deine TableView-Breite anpassen + falls der horizontale Header angezeigt wird, kannst du Spalten-Resize-Events verfolgen und sie erneut anpassen. Unten ist ein Beispielcode dafür:
Initialisierung:
// Füge 3 Spalten zur TableView hinzu
tableModel->insertColumn(0, QModelIndex());
tableModel->insertColumn(1, QModelIndex());
tableModel->insertColumn(2, QModelIndex());
...
// Schalte die horizontale Scrollleiste aus; obwohl dies hier nicht wirklich nötig ist
ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// Größe anpassen; siehe untenstehenden Code
adjustTableSize();
// Verbinde mit dem horizontalen Header-Resize-Event (nicht nötig, wenn der Header nicht angezeigt wird)
connect(ui->tableView->horizontalHeader(),SIGNAL(sectionResized(int,int,int)), this,
SLOT(updateSectionWidth(int,int,int)));
// Verbinde mit dem Datenänderungs-Event des Modells
connect(ui->tableView->model(), SIGNAL(dataChanged(QModelIndex,QModelIndex)),
this, SLOT(dataChanged(QModelIndex,QModelIndex)));
TableView-Größe anpassen:
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);
}
Modelländerung verarbeiten:
void MainWindow::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
adjustTableSize();
}
Horizontales Header-Resize verarbeiten:
void MainWindow::updateSectionWidth(int logicalIndex, int, int newSize)
{
adjustTableSize();
}
Ich hoffe das hilft, viele Grüße
0 Stimmen
Ich bin überrascht, dass es keine integrierte Methode gibt, dies in einer Zeile zu tun. Immer noch nichts seit '09? Scheint etwas zu sein, das genauso wichtig sein sollte wie
resizeColumnsToContents()
, das bereits existiert.