本文以QTreeView为例,理论上继承自QAbstractScrollArea的类都支持本文所述的方法。
一.效果
一共5个文件夹,每个文件文件夹下有5个文件,先把文件夹展开,然后截图。将滚动条拖到居中位置,是为了证明截图对滚动条无影响
下面是截的图
二.原理
将滚动区域的viewport设置为滚动区域总大小,截图后再将viewport恢复。
这里关键是滚动区域总大小的计算,网上的方法都比较扯淡,这里就不贴了。本文独家方法如下:
int totalHeight = ui->treeView->viewport()->height();
int totalWidth = ui->treeView->viewport()->width();
// 如果垂直滚动条存在
if (ui->treeView->verticalScrollBar()->maximum() != 0)
{
totalHeight = ui->treeView->verticalScrollBar()->maximum() + ui->treeView->verticalScrollBar()->pageStep();
}
if (ui->treeView-