管理器Widgets(05):【类】QSplitterHandle [官翻]

本文详细介绍了如何使用QSplitterHandle自定义Qt拆分器的句柄,包括构造、析构方法,以及重写的关键函数如orientation()、opaqueResize()等。通过示例展示了如何创建并定制句柄的外观和行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QSplitterHandle 类

QSplitterHandle类为拆分器提供句柄功能。

Header#include < QSplitterHandle >
qmakeQT += widgets
InheritsQWidget
Inherited By

详细说明

QSplitterHandle通常是人们在考虑拆分器时所考虑的。它是用于调整小部件大小的句柄。

使用QSplitter的典型开发人员永远不必担心QSplitterHandle。它是为那些需要提供额外功能(如弹出菜单)的拆分器句柄的开发人员提供的。

创建拆分器句柄的典型方法是子类QSpliter,然后重新实现QSplitter::createHandle() 来实例化自定义拆分器句柄。例如,最小QSplitter子类可能如下所示:

 class Splitter : public QSplitter
 {
 public:
     Splitter(Qt::Orientation orientation, QWidget *parent = 0);

 protected:
     QSplitterHandle *createHandle() override;
 };

createHandle() 实现只是构造一个自定义拆分器句柄,在本例中称为splitter:

QSplitterHandle *Splitter::createHandle()
 {
     return new SplitterHandle(orientation(), this);
 }

有关给定句柄的信息可以使用诸如orientation() 和opaqueResize() 之类的函数获得,并从其父拆分器中检索。这些细节可以用于根据拆分器的方向为自定义控制柄提供不同的外观。

自定义句柄子类的复杂性取决于它需要执行的任务。简单的子类可能只提供paintEvent() 实现:

void SplitterHandle::paintEvent(QPaintEvent *event)
 {
     QPainter painter(this);
     if (orientation() == Qt::Horizontal) {
         gradient.setStart(rect().left(), rect().height()/2);
         gradient.setFinalStop(rect().right(), rect().height()/2);
     } else {
         gradient.setStart(rect().width()/2, rect().top());
         gradient.setFinalStop(rect().width()/2, rect().bottom());
     }
     painter.fillRect(event->rect(), QBrush(gradient));
 }

在本例中,根据控制柄的方向,预定义的渐变设置不同。QSplitterHandle为句柄提供了合理的大小提示,因此子类不需要提供sizeHint() 的重新实现,除非句柄有特殊的大小要求。

公共函数

构造和析构

  1. QSplitterHandle(Qt::Orientation orientation, QSplitter *parent)
  2. virtual ~QSplitterHandle()

其他

  1. bool opaqueResize() const 在以交互方式移动拆分器时动态调整小部件的大小(不透明)

    此值由QSpliter控制。

  2. Qt::Orientation orientation() const 返回句柄的方向

    这通常是从QSpliter传播的。

  3. void setOrientation(Qt::Orientation orientation) 将拆分器控制柄的方向设置为“orientation”
    这通常是从QSpliter 传播的。

  4. QSplitter * splitter() const 返回与此拆分器句柄关联的拆分器

重写的公共函数

  1. virtual QSize sizeHint() const override

受保护的函数

  1. int closestLegalPosition(int pos)
  2. void moveSplitter(int pos)

重写的受保护的函数

  1. virtual bool event(QEvent *event) override
  2. virtual void mouseMoveEvent(QMouseEvent *e) override
  3. virtual void mousePressEvent(QMouseEvent *e) override
  4. virtual void mouseReleaseEvent(QMouseEvent *e) override
  5. virtual void paintEvent(QPaintEvent *) override
  6. virtual void resizeEvent(QResizeEvent *event) override
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值