gpt4 book ai didi

c++ - QTableView 将 View 重新聚焦到特定列

转载 作者:搜寻专家 更新时间:2023-10-31 01:04:19 28 4
gpt4 key购买 nike

我有一个 QTableView,其中显示了 80 多个列。我为 QTableView 创建的子类允许具有我想要的标准表格功能,例如按列排序移动列和行隐藏列和行等。

但是我遇到的问题是 View 的焦点。假设您拥有表格中的所有数据,您一直向右滚动,因此您正在查看第 70-80 列(假设屏幕上同时显示 10 列)如果我单击第 80 行的标题(订购通过第 80 列)表格重新排序(如预期的那样)但是它也会将 View 跳转到最后一个聚焦的单元格(据我所知这是最后一次单击的单元格)

我想做的不一定是重新关注被点击的列,因为这可能仍然会改变 View 我正在寻找的是保持 View 的焦点完全原样,而不是让它跳回到上次点击的位置单击的单元格是?

焦点策略是否缺少某些标志,或者我是否需要获取当前 View 并在单击鼠标对表格重新排序后将 View 设置回该 View ,如果是,该如何完成。

我知道我没有为这个问题提供任何代码,但似乎不需要任何代码,因为它不是一个错误,我希望修复更多我不知道的功能,如果你想看到任何评论

编辑:

我使用的是 QSortFilterPorxyModel,这似乎设置了一次(当我调用 this->setSortingEnabled(true); 时,在构建时初始调用此之后,我的表模型再也不会调用排序。我有一个链接到标题点击信号的插槽,我将滚动条设置为 scrollTo() 到点击的索引,但我认为排序是在这之后发生的,所以它什么都不做,不知道是什么排序后会发出信号,这样我就可以捕捉到它们,然后重新设置 View ?谢谢

最佳答案

在进行排序之前,存储滚动条所在位置的当前值

int vPos = yourQTableView->verticalScrollBar()->sliderPosition();
int hPos = yourQTableView->horizontalScrollBar()->sliderPosition();

然后排序之后,再设置回去

yourQTableView->verticalScrollBar()->setSliderPosition(vPos);
yourQTableView->horizontalScrollBar()->setSliderPosition(hPos);

你要找的信号是继承自QAbstractItemModel的QSortFilterProxyModel的信号:

layoutAboutToBeChanged()
layoutChanged()

关于c++ - QTableView 将 View 重新聚焦到特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24137277/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com