你可以做的是根据它们的数据计算你的tableview列宽度(或者你可以为每个列调用resizeColumnToContents来调整它的内容大小).然后将tableview宽度更改为等于或大于列的总宽度+垂直标题(如果显示).您还需要跟踪模型更改并调整工作台视图宽度+如果显示水平标题,您可以跟踪列调整大小事件并再次调整它们.以下是一些示例代码:
初始化:
// 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)));
Run Code Online (Sandbox Code Playgroud)
调整tableview大小:
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);
}
Run Code Online (Sandbox Code Playgroud)
流程模型的变化
void MainWindow::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
adjustTableSize();
}
Run Code Online (Sandbox Code Playgroud)
处理水平标题调整大小
void MainWindow::updateSectionWidth(int logicalIndex, int, int newSize)
{
adjustTableSize();
}
Run Code Online (Sandbox Code Playgroud)
希望这有帮助,问候
| 归档时间: |
|
| 查看次数: |
16055 次 |
| 最近记录: |