在之前写的轮播控件基础上,添加新的轮播类型。
效果图
由于录制原因,鼠标进入控件时的事件被录制软件屏蔽了。左右两侧是有切换图片的绘制。
两侧:
头文件
#ifndef QWHADVERTISINGPAGEEX_H
#define QWHADVERTISINGPAGEEX_H
#include <QWidget>
#include <QPushButton>
#include <QPaintEvent>
#include <QPainter>
#include <QTimer>
#include <QPropertyAnimation>
#include <QSpacerItem>
#include <QHBoxLayout>
#include <QEvent>
#include <QResizeEvent>
#include <QMouseEvent>
#define Max 1
#define Min 0.6
//#define COUNT 6
#define SHOW 5
class QWHAdvertisingPageEx : public QWidget
{
Q_OBJECT
Q_ENUMS(NavType)
Q_ENUMS(NavPos)
Q_PROPERTY(int offsetX READ getOffsetX WRITE setOffsetX)
public:
enum PlayType
{
Normal, //常规播放
Animation //动画播放
};
enum NavType
{
Rectangle, //矩形
RoundedRectangle, //圆角矩形
Circle, //圆形
Concentric_circle, //同心圆
Ellipse, //椭圆
AnimationEllipse, //动画椭圆
};
enum NavPos
{
Left, //左侧
Center, //居中
Right //右侧
};
explicit QWHAdvertisingPageEx(QWidget *parent = nullptr);
public:
//设置轮播方向,true表示图片向左移动,false表示图片向右移动
void setPlayDir(bool turnLeft);
//设置导航器序号是否显示
void setNavTextVisible(bool textVisible);
//设置鼠标是否悬停
void setMouseHoverStop(bool mouseHoverStop);
//设置鼠标悬停导航器按钮时是否图片切换,若为true,则悬停导航器按钮时切换图片;否则点击导航器按钮时切换图片
void setMouseNavHoverChange(bool mouseNavHoverChange);
//设置导航器样式
void setNavType(NavType navType);
//设置导航器位置
void setNavPos(NavPos navPos);
//设置导航器按钮大小
void setNavBtnSize(QSize navBtnSize);
//设置背景颜色
void setBgColor(QColor bgColor);
//设置导航器序号(文本)颜色
void setNavTextColor(QColor navTextColor);
//设置导航器常规颜色
void setNavColor(QColor navColor);
//设置导航器悬停颜色
void setNavHoverColor(QColor navHoverColor);
//设置导航器按下颜色
void setNavPressColor(QColor navPressColor);
//设置广告图片信息
void setPixmap(const QList<QPixmap *> &pixmaps);
//设置图片切换间隔(图片轮换间隔,包含了图片动画间隔,单位:毫秒)
void setChangePixmapInterVal(int msecs);
//设置图片移动间隔(图片动画间隔,单位:毫秒)
void setPixmapAnimationInterval(int msecs);
//获取轮播方向,true表示图片向左移动,false表示图片向右移动
bool getPlayDir() const;
//获取导航器序号是否显示
bool getNavTextVisible() const;
//获取鼠标是否悬停
bool getMouseHoverStop() const;
//获取鼠标悬停导航器按钮时是否图片切换,若为true,则悬停导航器按钮时切换图片;否则点击导航器按钮时切换图片
bool getMouseNavHoverChange() const;
//获取导航器样式
NavType getNavType() const;
//获取导航器位置
NavPos getNavPos() const;
//获取导航器按钮大小
QSize getNavBtnSize() const;
//获取背景颜色
QColor getBgColor() const;
//获取导航器序号(文本)颜色
QColor getNavTextColor() const;
//获取导航器常规颜色
QColor getNavColor() const;
//获取导航器悬停颜色
QColor getNavHoverColor() const;
//获取导航器按下颜色
QColor getNavPressColor() const;
//获取广告图片信息
QList<QPixmap *> getPixmap() const;
//获取图片切换间隔(图片轮换间隔,包含了图片动画间隔,单位:毫秒)
int getChangePixmapInterVal() const;
//获取图片移动间隔(图片动画间隔,单位:毫秒)
int getPixmapAnimationInterval() const;
protected:
void paintEvent(QPaintEvent *event);
//绘制两侧点击切换区域
void drawBothSidesArea(QPainter *painter);
//绘制普通轮播图
void drawNormalType(QPainter *painter);
//绘制动画轮播图
void drawAnimationType(QPainter *painter);
void enterEvent(QEvent *event);
void leaveEvent(QEvent *event);
void mousePressEvent(QMouseEvent *event);
bool eventFilter(QObject *obj, QEvent *ev);
void resizeEvent(QResizeEvent *event);
signals:
void currentIndexChanged(int index);
private:
void initForm();
void setOffsetX(int offsetX);
int getOffsetX() const;
//获取下一张图片索引
int nextIndex(int curIndex);
//获取前一张图片索引
int preIndex(int curIndex);
private slots:
void onTimeout(); //定时器触发
void onClicked(); //导航新点击
private:
bool m_turnLeft; //轮播方向
bool m_navTextVisible; //显示导航器序号
bool m_mouseHoverStop; //是否鼠标悬停
bool m_mouseNavHoverChange; //是否鼠标悬停导航器按钮时图片切换
PlayType m_playType; //轮播样式
NavType m_navType; //导航器样式
NavPos m_navPos; //导航器位置
QSize m_navBtnSize; //导航器按钮大小
QColor m_bgColor; //背景颜色
QColor m_navTextColor; //导航器序号颜色
QColor m_navColor; //导航器颜色
QColor m_navHoverColor; //导航器悬停颜色
QColor m_navPressColor; //导航器按下颜色
QList<QPixmap *> m_pixmaps; //存储图片信息
int m_changePixmapInterVal; //图片切换间隔(图片轮换间隔,包含了图片动画间隔,单位:毫秒)
int m_PixmapAnimationInterval; //图片移动间隔(图片动画间隔,单位:毫秒)
int m_curIndex; //当前图片索引
int m_preIndex; //之前图片索引
int m_offsetX; //图片偏移量
bool m_isMouseIn; //鼠标进入该控件
bool m_dirChanged; //点击左右区域导致轮播方向与之前改变,true表示改变
//布局控件
QWidget *m_navWidget; //存放导航器信息
QHBoxLayout *m_hNavLayout; //导航信息窗体布局
QHBoxLayout *m_hLayout; //页面底部导航器整体布局
QSpacerItem *m_vSpacerItem; //导航器上册弹簧
QSpacerItem *m_lSpacerItem; //导航器左侧弹簧
QSpacerItem *m_rSpacerItem; //导航器右侧弹簧
QList<QPushButton *> m_btns; //存储导航控件
//轮播控件
QTimer *m_timer; //定时器轮播广告
QPropertyAnimation *m_animation; //属性动画
};
#endif // QWHADVERTISINGPAGEEX_H