即使在滚动时如何也不移动 QScrollArea 中的内容

Posted

技术标签:

【中文标题】即使在滚动时如何也不移动 QScrollArea 中的内容【英文标题】:How to not move the contents in QScrollArea even on scroll 【发布时间】:2016-06-24 12:51:38 【问题描述】:

我有一个滚动区域,其中有一个小部件,比如 scrollWidget。根据scrollValue,我有不同的图像要加载到scrollWidget 上。基本上,在滚动时,滚动条应该滚动,但 scrollArea 内的小部件不应该移动。根据新的滚动值,我将更新scrollWidget中的图像。

查看源码发现

void QScrollArea::scrollContentsBy(int, int)

负责移动小部件。

所以,试图覆盖该函数,在被覆盖的函数中,我只是返回,什么都不做。

//overriden function
    void scrollContentsBy(int dx, int dy)
    
       return;
    

并且在 scrollValueChanged 上调用了被覆盖的函数。即使这样,scrollWidget 也在以某种方式滚动。

还有其他人在滚动区域内移动滚动小部件吗?

提前致谢。

【问题讨论】:

【参考方案1】:

您应该使用自己的QScrollBar 实现一个小部件,而不是QScrollArea。只需在您的小部件上放置一个QScrollBar 并手动控制它。也许最好实现QAbstractScrollArea 抽象类,它可以帮助处理滚动(但可能会导致其他麻烦,就像 Qt 子框架经常发生的那样......)。

【讨论】:

以上是关于即使在滚动时如何也不移动 QScrollArea 中的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 QScrollArea 使滚动条出现

7.3 QScrollArea滚动视图

QScrollArea 中的自定义小部件仅在滚动时严重重绘

以编程方式滚动 QScrollArea

QScrollArea qss样式表,美化滚动条

QScrollArea qss样式表,美化滚动条