乐趣区

关于c++:Qt-自定义组件滑动窗口

仓库

桌面背景切换

桌面背景放弃

个性

  1. 反对小部件追加
  2. 反对获取小部件的数量
  3. 反对获取以后小部件的索引和小局部地址
  4. 反对查问给定的小部件索引
  5. 反对设置首页小部件
  6. 反对小部件移除
  7. 反对背景图片是否可滑动切换!!!
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QWidget>
#include <QScrollArea>
#include <QHBoxLayout>
#include <QScroller>
#include <QTimer>
#include <QPropertyAnimation>

/* 滑动窗口
 * 1. 反对小部件追加
 * 2. 反对获取小部件的数量
 * 3. 反对获取以后小部件的索引和小局部地址
 * 4. 反对查问给定的小部件索引
 * 5. 反对设置首页小部件
 * 6. 反对小部件移除
 * 7. 反对背景图片是否可滑动切换!!!*     SliderWidget(QWidget *parent = nullptr, const QString &picture = "");
 *     当 picture 传入图片地址时,背景图片将始终放弃不可切换
 */

class SliderWidget : public QWidget
{
    Q_OBJECT

public:
    SliderWidget(QWidget *parent = nullptr, const QString &picture = "");
    ~SliderWidget();

    int addWidget(QWidget *page);
    int count() const;
    int currentIndex() const;
    QWidget *currentWidget() const;
    int indexOf(QWidget *widget) const;

public slots:
    void setCurrentIndex(int index);
    void setCurrentWidget(QWidget *widget);

    void removeWidget(int index);
    void removeWidget(QWidget *widget);

protected:
    void resizeEvent(QResizeEvent *ev) override;

protected slots:
    void onScrollerStateChanged(QScroller::State state);
    void onSliderTimerTimeout();

signals:
    void currentChanged(int index);

private:
    void initUi();
    void initCtrl();
    void updateIndicator(int index);

private:
    QWidget *m_pMainWidget;
    QScrollArea *m_pScrollArea;
    QHBoxLayout *m_pMainLayout;
    QWidget *m_pIndicatorWidget;
    QHBoxLayout *m_pIndicatorLayout;

    QPropertyAnimation *m_pAnimation;
    QTimer *m_pSlidingTimer;

    bool m_sliderFlag = false;
    int m_sliderPressedValue = 0;
    int m_sliderReleaseValue = 0;
    int m_curPageIndex = -1;
    int m_nextPageIndex = -1;

    QString m_background;
};
#endif // MAINWINDOW_H
退出移动版