基本Widgets(11):【类】QScrollBar [官翻]

QScrollBar Class

QScrollBar小部件提供垂直或水平滚动条。

Header#include < QScrollBar >
qmakeQT += widgets
InheritsQAbstractSlider
Inherited By

详细说明

滚动条是一个控件,允许用户访问文档中比用于显示文档的小部件大的部分。它提供用户在文档中的当前位置以及可见文档的数量的可视指示。滚动条通常配有其他控件,可以实现更精确的导航。Qt以适合每个平台的方式显示滚动条。

如果需要在另一个小部件上提供滚动视图,那么使用QScrollArea类可能更方便,因为它提供了一个视口小部件和滚动条。如果您需要使用QAbstractScrollArea为专用小部件实现类似的功能,那么QScrollBar非常有用;例如,如果您决定将QAbstractItemView 作为子类。对于大多数其他使用滑块控件获取给定范围内的值的情况,QSlider类可能更适合您的需要。

滚动条通常包括四个独立的控件:滑块、滚动箭头和页面控件。
  • a.滑块提供了一种快速转到文档任何部分的方法,但不支持在大型文档中进行精确导航。
  • b.滚动箭头是可用于精确导航到文档中特定位置的按钮。对于连接到文本编辑器的垂直滚动条,它们通常会将当前位置向上或向下移动一行,并少量调整滑块的位置。在编辑器和列表框中,“行”可能表示一行文本;在图像查看器中,它可能表示20像素。
  • c.页面控件是拖动滑块的区域(滚动条的背景)。单击此处将滚动条移向单击一个“页面”。此值通常与滑块的长度相同。

    每个滚动条都有一个值,指示滑块距滚动条起点的距离;这是通过value() 获得的,并通过setValue() 设置的。此值始终位于为滚动条定义的值的范围内,从 minimum() 到 maximum() 包括在内。可以使用setMinimum() 和setMaximum() 设置可接受值的范围。在最小值时,滑块的上边缘(对于垂直滚动条)或左边缘(对于水平滚动条)将位于滚动条的顶端(或左端)。最大值时,滑块的底部(或右)边缘将位于滚动条的底部(或右)端。

    滑块的长度通常与页面步长的值相关,通常表示滚动视图中显示的文档区域的比例。页面步长是当用户按page Up和page Down键时值的变化量,并用setPageStep() 设置。使用光标键对行步骤定义的值进行较小的更改,并使用setSingleStep() 设置此数量。

    请注意,使用的值的范围与滚动条小部件的实际大小无关。在为范围和页面步数选择值时,不需要考虑这一点。

    为滚动条指定的值的范围通常与为QSlider指定的值的范围不同,因为需要考虑滑块的长度。如果我们有一个100行的文档,并且我们只能在一个小部件中显示20行,那么我们可能希望构造一个页面步长为20、最小值为0、最大值为80的滚动条。这将给我们一个滚动条与五个“页”。

    文档长度、滚动条中使用的值范围和页面步骤之间的关系在许多常见情况下都很简单。滚动条的值范围是通过从表示文档长度的值中减去所选的页面步长来确定的。在这种情况下,以下公式很有用: document length = maximum() - minimum() + pageStep().

    QScrollBar只提供整数范围。请注意,尽管QScrollBar处理非常大的数字,但当前屏幕上的滚动条不能有效地表示大约100000像素以上的范围。除此之外,用户很难使用键盘或鼠标控制滑块,滚动箭头的用途也很有限。

    ScrollBar从QAbstractSlider继承了一组全面的信号:

    • 当滚动条的值发生更改时,将发出valueChanged() ,tracking() 确定此信号是否在用户交互期间发出。
    • rangeChanged() 在滚动条的值范围更改时发出
    • 当用户开始拖动滑块时,会发出sliderPressed()
    • 当用户拖动滑块时,会发出sliderMoved()
    • 当用户释放滑块时,会发出sliderReleased()
    • 当用户交互或通过triggerAction() 函数更改滚动条时,将发出ActionTrigger()

    滚动条可以由键盘控制,但它的默认focusPolicy() 为Qt::NoFocus。使用setFocusPolicy() 启用与滚动条的键盘交互:

    • 左/右移动水平滚动条一步
    • 向上/向下移动垂直滚动条一步
    • PageUp向上移动一页
    • PageDown向下移动一页
    • 原点移到起点(mininum)
    • 末端移动到末端(最大值)

    通过使用triggerAction() 函数来模拟用户与滚动条控件的交互,可以控制滑块本身。如果您有许多使用公共值范围的不同小部件,这将非常有用。

    大多数GUI样式都使用pageStep() 值来计算滑块的大小。

    公共函数

    构造和析构

    1. QScrollBar(Qt::Orientation orientation, QWidget *parent = nullptr)

    2. QScrollBar(QWidget *parent = nullptr)

    3. virtual ~QScrollBar()

      方向默认为垂直滚动条。
      最小值默认为0,最大值为99,单步大小为1,页面步长为10,初始值为0。

    重写的公共函数

    1. virtual bool event(QEvent *event) override
    2. virtual QSize sizeHint() const override

    受保护的函数

    1. void initStyleOption(QStyleOptionSlider *option) const

    重写的受保护的函数

    1. virtual void contextMenuEvent(QContextMenuEvent *event) override
    2. virtual void hideEvent(QHideEvent *) override
    3. virtual void mouseMoveEvent(QMouseEvent *e) override
    4. virtual void mousePressEvent(QMouseEvent *e) override
    5. virtual void mouseReleaseEvent(QMouseEvent *e) override
    6. virtual void paintEvent(QPaintEvent *) override
    7. virtual void sliderChange(QAbstractSlider::SliderChange change) override
    8. virtual void wheelEvent(QWheelEvent *event) override

    小实例

    #include <QtWidgets>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc,argv);
        app.setApplicationName ("QScrollBar");
        QWidget w;
        w.resize (300,200);
        QHBoxLayout mainLayout(&w);
    
        QScrollBar widget1;
        QScrollBar widget2;
        QScrollBar widget3;
    
        widget1.setStyleSheet ("background-color:red");
        widget2.setStyleSheet ("background-color:green");
        widget3.setStyleSheet ("background-color:blue");
    
    //    widget1.setOrientation (Qt::Horizontal);
        widget2.setOrientation (Qt::Horizontal);
    //    widget3.setOrientation (Qt::Horizontal);
    
        // 布局加入,此时部件的父类是mainLayout
        mainLayout.addWidget (&widget1);
        mainLayout.addWidget (&widget2);
        mainLayout.addWidget (&widget3);
    
        w.show ();
        app.exec();
        return 0;
    }
    
    • 2
      点赞
    • 14
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    ### 回答1: 错误信息:"pycharm导入不成功from pyqt5 import qtwidgets importerror: dll load failed: %",这个错误通常是由于缺少相应的动态链接库(dll)文件或者dll文件版本不匹配引起的。 解决这个问题的一种方法是重新安装PyQt5库,并确保选择与所使用的Python版本相对应的库版本。可以通过命令提示符或终端运行以下命令来重新安装PyQt5库: pip uninstall PyQt5 pip install PyQt5 另外,也可以尝试下载并安装Microsoft Visual C++ Redistributable包,以确保系统具有所需的C++运行时库。 如果上述方法都无法解决问题,还可以尝试更新PyQt5库的版本,或者在PyCharm中重新设置Python解释器路径,确保正确指定Python解释器。 总之,导入错误通常是因为缺失或版本不匹配的dll文件,通过重新安装库或更新版本,以及安装相应的C++运行时库,可以解决该问题。 ### 回答2: 这个错误信息意味着在导入pyqt5库的时候发生了问题,并且指出了导入错误的原因是“dll load failed”。这种情况通常发生在某些Windows系统上,可能是因为缺少Qt运行库或者Qt运行库不兼容所致。 要解决这个问题,你可以尝试以下几个步骤: 1. 确保你已经正确安装了pyqt5库。你可以通过运行`pip install pyqt5`来安装最新版本的pyqt5库。 2. 检查你的系统环境变量。确保你的系统环境变量中的路径包含了正确的Qt运行库路径。你可以在Qt安装目录中搜索并找到你系统版本所需的库文件,然后将该路径添加到系统环境变量中。 3. 检查你的Python版本和Qt运行库版本是否兼容。如果你使用的是Python的64位版本,那么请确保你安装的是64位的Qt运行库。 4. 尝试重新安装Qt运行库。你可以在Qt的官方网站上下载适合你系统和Python版本的Qt运行库,并进行重新安装。 5. 尝试使用conda来安装pyqt5库。有时候,使用conda安装库可以避免一些兼容性问题。 如果你尝试了以上方法仍然无法解决问题,那么可能是由于其他的系统配置问题所致。你可以尝试在相关的技术论坛或社区中寻求帮助,或者向PyCharm的开发者反馈该问题,他们可能能够提供更准确的解决方案。 ### 回答3: 当我们遇到 "from pyqt5 import qtwidgets importerror: dll load failed"这个错误时,通常是因为pycharm无法找到所需的dll文件。 解决此问题的步骤如下: 1. 首先,我们需要确保已经正确安装了 PyQt5 模块。可以通过在终端中运行 "pip install pyqt5" 命令来安装。 2. 检查是否存在 dll 文件。在运行pycharm前,请确保系统中有必要的 dll 文件,特别是针对 PyQt5 模块包含的 dll 文件。这些文件通常在 PyQt5 的安装目录下。可以尝试重新安装 PyQt5 模块来修复这个问题。 3. 检查系统环境变量。在某些情况下,pycharm可能无法正确找到 dll 文件,这是因为缺少相关的系统环境变量。我们可以通过手动设置系统环境变量来解决这个问题。打开"我的电脑",右键选择"属性",然后选择"高级系统设置",在弹出的窗口中选择"环境变量"选项。在"系统变量"中找到 "Path" 变量,然后编辑它,添加 PyQt5 相关 dll 文件的路径。 4. 确保 pycharm 的项目中已安装 PyQt5 模块。在 pycharm 中,可以在项目设置中查看模块的安装情况。如果 PyQt5 模块没有安装,在项目设置中选择 "解释器",然后安装 PyQt5 模块。 5. 检查 pycharm 的配置是否正确。在 pycharm 中,可以检查配置是否正确,选择菜单栏中的 "文件",然后选择 "设置"。在 "设置" 窗口的左侧,选择 "项目",然后选择 "项目解释器"。确保已指定正确的解释器路径。 通过以上几个步骤,我们可以尽可能排除导致 "from pyqt5 import qtwidgets importerror: dll load failed"错误的原因,并尝试解决这个问题。

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值