效果图
记分牌控件头文件
#ifndef QWHSCOREBOARD_H
#define QWHSCOREBOARD_H
/*
* 记分牌控件,可单独使用
*/
#include <QWidget>
#include <QPaintEvent>
#include <QPainter>
#include <QPropertyAnimation>
#include <QResizeEvent>
class QWHScoreBoard : public QWidget
{
Q_OBJECT
Q_PROPERTY(float m_offsetY READ offsetY WRITE setOffsetY)
public:
explicit QWHScoreBoard(QWidget *parent = nullptr);
~QWHScoreBoard();
public:
//设置文本列表
void setTexts(const QStringList &texts);
//设置当前显示的文本
void setCurText(const QString &curText);
//设置需要显示的文本
void setTargetText(const QString &text);
//设置单个文本滚动时间
void setInternal(int msecs);
//设置文本颜色
void setTextColor(const QColor &color);
//设置边框颜色
void setBorderColor(const QColor &color);
//设置背景颜色
void setBgColor(const QBrush &color);
//开始滚动
void start(int internal = -1);
//停止滚动
void stop();
//获取文本列表
QStringList texts() const;
//获取当前显示的文本
QString curText() const;
//获取需要显示的文本
QString targetText() const;
//获取单个文本滚动时间
int internal() const;
//获取文本颜色
QColor textColor() const;
//获取边框颜色
QColor borderColor() const;
//获取背景颜色
QBrush bgColor() const;
protected:
void paintEvent(QPaintEvent *event);
void resizeEvent(QResizeEvent *event);
private:
void setOffsetY(float offsetY);
float offsetY() const;
private slots:
void onFinished();
signals:
//当前文本改变时,发送信号
void currentValueChanged(const QString value);
private:
bool m_isStart; //是否启动
float m_offsetY; //Y偏移量
int m_internal; //单文本切换间隔
int m_curIndex; //当前文本索引
int m_nextIndex; //下一个显示文本索引
int m_targetIndex; //目标文本索引
QStringList m_texts; //可显示文本列表
QColor m_textColor; //文本颜色
QColor m_borderColor; //边框颜色
QBrush m_bgColor; //背景颜色
QPropertyAnimation *m_animation; //属性动画
};
#endif // QWHSCOREBOARD_H
记分牌面板控件头文件
#ifndef QWHSCOREBOARDPANEL_H
#define QWHSCOREBOARDPANEL_H
/*
* 记分牌面板控件,与记分牌控件组合使用
*/
#include "qwhscoreboard.h"
#include <QWidget>
class QWHScoreBoardPanel : public QObject
{
Q_OBJECT
public:
explicit QWHScoreBoardPanel(QObject *parent = nullptr);
~QWHScoreBoardPanel();
public:
//添加记分牌控件
void addScoreBoard(QWHScoreBoard *scoreBoard);
//设置需要显示的最终文本
void setTargetText(const QStringList &text);
//设置单个文本滚动时间
void setInternal(int msecs);
//启动
void start(int internal = -1);
//停止
void stop();
//获取记分牌控件
QList<QWHScoreBoard *> scoreBoards() const;
//获取需要显示的最终文本
QStringList text() const;
//获取单个文本滚动时间
int internal() const;
signals:
void currentValueChanged(QString value);
public slots:
void onCurrentValueChanged(QString value);
private:
int m_internal; //单文本切换间隔
QStringList m_text; //目标文本
QList<QWHScoreBoard *> m_scoreBoards; //存储记分牌控件
QVector<QString> m_curText; //存储当前所有记分牌控件的值
};
#endif // QWHSCOREBOARDPANEL_H