qt - 为什么 QScrollArea 不考虑垂直滚动条宽度?
问题描述
考虑以下示例,
import sys
from PyQt5 import QtCore, QtWidgets
class scrolldemo(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(scrolldemo, self).__init__(parent)
widget = QtWidgets.QWidget()
widget.setFixedSize(QtCore.QSize(500, 600))
scroll = QtWidgets.QScrollArea()
scroll.setWidget(widget)
self.setCentralWidget(scroll)
self.setWindowTitle("Scroll demo")
def main():
app = QtWidgets.QApplication(sys.argv)
ex = scrolldemo()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
小部件的尺寸在垂直方向上略微过大,这会增加一个垂直滚动条。但是,垂直滚动条占用了小部件本身占用的空间。这也需要一个水平滚动条,使窗口看起来像这样:
我对垂直滚动条没问题,但水平滚动条很笨拙。请注意,水平滚动条所需的额外空间恰好是垂直条的宽度。
这可以通过覆盖sizeHint
包含垂直滚动条宽度的方法来解决,
class ScrollAreaWithVerticalBar(QtWidgets.QScrollArea):
def sizeHint(self):
hint = super().sizeHint()
bar_width = self.verticalScrollBar().sizeHint().width()
return QtCore.QSize(hint.width() + bar_width, hint.height())
这会产生一个略宽的 QScrollArea,不再需要笨拙的水平滚动条。我通过查看与此问题相关的已关闭 Qt 错误报告得到了这个想法。但是,该错误报告被关闭为“超出范围”,这让我认为这根本不是错误,我使用 QScrollArea 不正确,我的错误使用也需要解决方法。
那么我应该怎么做呢?
解决方案
推荐阅读
- bash - 如何删除 df 命令中的标头?
- javascript - 如何将接口导出到全局命名空间 - 角度
- image - 将图像转换为具有正确尺寸的 Numpy 数组
- c# - Blazor 服务器端,剃刀页面:对象引用未设置为对象的实例
- powershell - 如何通过powershell脚本将存储在以字节为单位的变量中的输出值动态转换为KB MB GB
- javascript - 使用单个按钮/复选框显示/隐藏多个 div
- javascript - 为什么可选链在我的 Node REPL 中不起作用?
- mysql - 计算总记录并插入另一个表字段
- java - 通过apt安装的Java上的Opencv在NetBeans上显示错误
- java - 如何使用存储在 AndroidKeyStore 中的私钥加密数据?