我想QTableView中的大小是一样的,因为它包含了表(固定),所以它不会有一个滚动条如何调整QTableView中,这样的区域也不滚动了
回答
什么你可以做的是根据他们拥有的数据计算你的tableview列的宽度(或者你可以调用每列的resizeColumnToContents来调整它的内容大小)。然后将tableview宽度改为等于或大于列的总宽度+垂直标题(如果显示)。您还需要跟踪模型更改并调整您的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)));
调整的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);
}
流程模型改变
void MainWindow::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
adjustTableSize();
}
处理水平头调整
void MainWindow::updateSectionWidth(int logicalIndex, int, int newSize)
{
adjustTableSize();
}
希望这会有所帮助,至于
thx但我已经能够做到这一点。这里唯一的问题是你需要考虑边界的大小。此外,纵向healder的width()和height()方法也有问题。宽度方法的值为0,高度给了我259的东西,这太大了。 – 2009-12-07 17:04:26
虽然水平标题的值很高。 – 2009-12-07 17:04:58
沿着同样,你可以使用'QHeaderView ::长度()'函数:'viewRect.setWidth(customsItemsView-> horizontalHeader() - >长度());'这似乎为我工作。 – 2013-09-14 21:51:18
sum(item.sizeHint()+headeroffset+border)
不为我工作得很好,即使电网是关闭还有的项目之间的间距可能。所以我这样做了调整:
view->resizeRowsToContents();
view->resizeColumnsToContents();
QAbstractItemModel* model = view->model();
QHeaderView* horHeader = view->horizontalHeader();
QHeaderView* verHeader = view->verticalHeader();
int rows = model->rowCount();
int cols = model->columnCount();
int x = horHeader->sectionViewportPosition(cols-1) + horHeader->offset()
+ horHeader->sectionSize(cols-1) + 1;
int y = verHeader->sectionViewportPosition(rows-1) + verHeader->offset()
+ verHeader->sectionSize(rows-1) + 1;
QPoint p = view->viewport()->mapToParent(QPoint(x,y));
QRect g = view->geometry();
g.setSize(QSize(p.x(),p.y()));
view->setGeometry(g);
如果最后一列和最后一行可见,应该工作。
我试图serge_gubenko的答案,但我并没有为我工作(部分原因是因为我想rezise高度和宽度)...所以我改变它;为了避免该表由布局或父控件,你需要这样调整:
ui->tableView->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
然后:
ui->tableView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->tableView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QRect rect = ui->tableView->geometry();
int width = 2,length = 2;
for(int col = 0;col<proxySortModel->columnCount();++col){
if(!ui->tableView->isColumnHidden(col))
width += ui->tableView->columnWidth(col);
}
for(int row =0;row<proxySortModel->rowCount();++row)
length += ui->tableView->rowHeight(row);
rect.setWidth(width);
rect.setHeight(length);
ui->tableView->setGeometry(rect);
我希望这可以帮助别人。
- 1. 保持滚动视图以外的区域也滚动
- 2. 滚动区域
- 3. 动态调整大小后QTableView滚动停止
- 4. recyclerview中的滚动区域
- 5. 如何使WPF DataGrid滚动条覆盖不可滚动区域?
- 6. 如何根据区域大小动态调整javafx中的svg
- 7. PRISM滚动区域
- 8. 正确协调两个滚动区域
- 9. 如何实现这样的滚动?
- 10. 如何调整滚动窗格中的滚动位置
- 11. 了解负面滚动条调整
- 12. 毕加索调整上滚动场了
- 13. 动态滚动区域
- 14. 如何动态调整spotfire文本区域的大小
- 15. QTableView不滚动和文本不包装
- 16. 如何动态调整滚动高度
- 17. qwtspectrogram轴调整区域不是像素
- 18. 垂直可调整QTableView中的QT5
- 19. 限制UIScrollView中的滚动区域
- 20. iPad可滚动区域
- 21. 如何样式QTableView CSS
- 22. iPhone:调整大小UIImageView不会调整“触摸区域”
- 23. 如何滚动到QTableView中的Sqlite模型的最后一行?
- 24. 如何在iPad的Safari中的固定区域内调整大小和滚动图像?
- 25. 使用滚动窗格但不滚动条的可滚动区域
- 26. 如何确保QTableView中的列被调整到最大值
- 27. 如何填写TVirtualStringTree中滚动条上方的区域?
- 28. 如何在ExtJS中创建具有自动调整功能的分割区域
- 29. 如何创建一个可滚动的html区域,该区域只使用主浏览器滚动条
- 30. 也Resize不也调整大小
我很惊讶,没有内置的方法在一行做到这一点。自09年以来还没有呢?看起来应该和已经存在的'resizeColumnsToContents()'一样重要。 – neuronet 2014-10-09 01:04:30