QSplitterHandle 类

QSplitterHandle 类提供了一个分割器的处理功能。 更多...

头文件 #include <QSplitterHandle>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QWidget

公共函数

QSplitterHandle(Qt::Orientation orientation, QSplitter *parent)
virtual~QSplitterHandle()
boolopaqueResize() const
Qt::Orientationorientation() const
voidsetOrientation(Qt::Orientation orientation)
QSplitter *splitter() const

重实现的公共函数

virtual QSizesizeHint() const override

保护函数

intclosestLegalPosition(int pos)
voidmoveSplitter(int pos)

重实现的保护函数

virtual boolevent(QEvent *event) override
virtual voidmouseMoveEvent(QMouseEvent *e) override
virtual voidmousePressEvent(QMouseEvent *e) override
virtual voidmouseReleaseEvent(QMouseEvent *e) override
virtual voidpaintEvent(QPaintEvent *) override
virtual voidresizeEvent(QResizeEvent *event) override

详细描述

QSplitterHandle 是人们想到分割器时通常会想到的东西。它是用于调整小部件大小的处理柄。

典型地使用 QSplitter 的开发者永远不用担心 QSplitterHandle。它是为想要提供额外功能(如弹出菜单)的分割器处理柄的开发者提供的。

创建分割器处理柄的典型方法是继承 QSplitter 并重新实现 QSplitter::createHandle() 以创建自定义分割器处理柄。例如,一个合适的 QSplitter 继承者可能如下所示

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

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(),除非句柄有特殊的尺寸要求。

另请参阅QSplitter.

成员函数文档

[显式] QSplitterHandle::QSplitterHandle(Qt::Orientation orientation, QSplitter *parent)

创建一个具有指定 orientationparent 的 QSplitter 句柄。

[虚函数,异常不抛出] QSplitterHandle::~QSplitterHandle()

析构函数。

[保护] int QSplitterHandle::closestLegalPosition(int pos)

返回分割器句柄最近的合法位置 pos。即使对于从右向左的语言,位置也是从分割器的左边缘或上边缘测量的。

另请参阅QSplitter::closestLegalPosition() 和 moveSplitter().

[重写,虚保护] bool QSplitterHandle::event(QEvent *event)

重新实现: QWidget::event(QEvent *event).

[重写,虚保护] void QSplitterHandle::mouseMoveEvent(QMouseEvent *e)

重新实现: QWidget::mouseMoveEvent(QMouseEvent *event).

[重写,虚保护] void QSplitterHandle::mousePressEvent(QMouseEvent *e)

重新实现: QWidget::mousePressEvent(QMouseEvent *event).

[重写,虚保护] void QSplitterHandle::mouseReleaseEvent(QMouseEvent *e)

重新实现: QWidget::mouseReleaseEvent(QMouseEvent *event).

[保护] void QSplitterHandle::moveSplitter(int pos)

告诉分割器将此句柄移动到位置 pos,这个位置是从小部件的左边缘或上边缘的距离。

注意,在从右向左的语言中,pos 也是从左(或上)测量的。这个函数将在调用QSplitter::moveSplitter()之前将 pos 映射到适当的位置。

参见QSplitter::moveSplitter() 和 closestLegalPosition()。

bool QSplitterHandle::opaqueResize() const

如果小部件在拖动分割器时动态(隐式)调整大小,则返回 true。否则返回 false。此值由 QSplitter 控制。

参见QSplitter::opaqueResize()。

Qt::Orientation QSplitterHandle::orientation() const

返回手柄的方向。这通常是从 QSplitter 传播出来的。

参见setOrientation() 和 QSplitter::orientation()。

[覆盖虚保护] void QSplitterHandle::paintEvent(QPaintEvent *)

重新实现了: QWidget::paintEvent(QPaintEvent *event)。

[覆盖虚保护] void QSplitterHandle::resizeEvent(QResizeEvent *event)

重新实现了: QWidget::resizeEvent(QResizeEvent *event)。

void QSplitterHandle::setOrientation(Qt::Orientation orientation)

将分割器手柄的方向设置为 orientation。这通常是从 QSplitter 传播出来的。

参见orientation() 和 QSplitter::setOrientation()。

[覆盖虚] QSize QSplitterHandle::sizeHint() const

重新实现了属性访问函数: QWidget::sizeHint

QSplitter *QSplitterHandle::splitter() const

返回与该分割器手柄关联的分割器。

参见QSplitter::handle()。

© 2024 Qt 公司有限公司。本文件中的文档贡献者的版权属于各自的所有者。本文件中提供的文档根据自由软件基金会发布的 GNU 自由文档许可协议版本 1.3 的条款许可。Qt 及其相关标志是全球 Finland 和/或其他国家 Qt 公司的商标。所有其他商标均为其各自所有者的财产。