为什么小部件没有得到resizeEvent?

时间:2012-09-08 17:18:09

标签: qt events layout

我正在尝试实现一个新的自定义滚动条。为此,我已使用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信号而生成的。

0 个答案:

没有答案