- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
void QAbstractScrollArea::setViewportMargins(int left, int top, int right, int Bottom) 的文档说:
将滚动区域周围的边距设置为左、上、右和下。这对于具有“锁定”行和列的电子表格等应用程序非常有用。边距空白;将小部件放在未使用的区域中。请注意,该函数经常被 QTreeView 和 QTableView 调用,因此边距必须由 QAbstractScrollArea 子类实现。另外,如果子类要在项目 View 中使用,则它们不应调用此函数。
首先,我对描述本身感到困惑。该函数不是虚拟的,因此当我应该重新实现它以提供我的利润时,情况并非如此。如果我应该在什么时候、什么时候打电话?如果 QTreeView 使用它自己的值在内部调用它,那么我们的调用将如何合作?查看 Qt 源代码,我发现 QTreeView::updateGeometries() 确实使用参数(本质上)0, headerHeight, 0, 0 调用它。那么我应该重新实现 updateGeometries() 吗?
进一步谷歌搜索,我发现其他人从重写的 resizeEvent() 中调用 setViewportMargins() 。所以我也这样做了,这有效但是:
通过重写 updateGeometries() 并将 header() 移动到顶部(调用 QTreeView::updateGeometries(); 之后),我在标题下方获得了未使用的区域。但我不确定这样做是否正确。
所以我的问题是:setViewportMargins() 文档意味着什么方式实现“锁定”行以及它们实际上应该如何实现?
请注意,我知道实现卡住行(或列)的另一种方法 - Frozen Column Example 。但这并不完全是我所需要的,因为这种技术隐藏了主表(树)小部件的第一行(列)并在覆盖(静态)小部件中显示它。就我而言,我需要在标题下方的区域中使用不同的信息,并且主小部件实际上应该向下移动以显示所有行
最佳答案
实际上这是一个很好的问题。就我个人而言,我不认为 setViewportMargins() 是一种可行的方法。通过使用viewportMargins,你唯一能实现的就是“移动”QTableView将绘制附加模型的边界,然后你必须通过绘制“卡住”行等来处理周围的空白空间。使这些空白空间“所有者绘制”你应始终寻找“主网格”的网格样式、字体大小等,以使“卡住”行/列看起来与主网格相同。
我尝试了几种方法来使编写代码变得更加美观和方便。最后,我最终制作了一个小部件,它结合了主网格(无标题)、顶部和左侧网格以及标题+角小部件。通过这样做,我有非常直接的方法来处理卡住部件,并在主网格模型顶部使用模型过滤器,以及为“卡住”部件等设置分离器的简单方法。
关于qt - setViewportMargins() 和 "locked"行和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18053403/
我有一个简单的文本编辑应用程序 - QPlainTextEdit,由 qt designer 创建。我只需要从 mainwindow.cpp setViewportMargins。但是我收到以下错误消
void QAbstractScrollArea::setViewportMargins(int left, int top, int right, int Bottom) 的文档说: 将滚动区域周围
我是一名优秀的程序员,十分优秀!