2

我正在尝试实现一个新的自定义滚动条。为此,我已手动将其放置在父级上this->setParent(area);


class QMacScrollBar : public QScrollBar
{
    Q_OBJECT
public:
    QMacScrollBar(QAbstractScrollArea *area, Qt::Orientation orientation, QWidget *parent = 0);

    virtual void paintEvent ( QPaintEvent * );
    QAbstractScrollArea *area;

signals:

public slots:
    virtual void resizeEvent(QResizeEvent *event);
};

QMacScrollBar::QMacScrollBar(QAbstractScrollArea *area, Qt::Orientation orientation, QWidget *parent) :
    QScrollBar(area)
{
    this->setMouseTracking(true);
    this->setOrientation(orientation);
    this->setParent(area);
    this->area = area;
}

void QMacScrollBar::resizeEvent(QResizeEvent *event){
    QRect geometry = QRect(QPoint(0, 0), event->size());
    if (area != NULL){
        geometry.setHeight(area->height());
        geometry.moveRight(area->width());
        geometry.adjust(-5, 0, -5, 0);
        this->setGeometry(geometry);
    }
    QScrollBar::resizeEvent(event);
}

我确实得到了前几个调整大小,但之后没有。到目前为止,我的猜测是,当我调整窗口大小时,QScrollArea 实际上并没有调整大小,它只是隐藏了更多的视口。我需要调整大小事件,因为我需要移动显示栏的位置。我该如何解决?

编辑:我得到的唯一调整是我通过连接到底层滚动条的setRange信号产生的那些。

4

0 回答 0