一款基于Qt GUI的随机选人小程序。按动右边小把手,出现按下弹回动效,然后滚动,随机选人。
唯一的缺点:滚动不够平滑。
核心源码:
//random_selector.h
#ifndef RANDOM_SELCTION_H
#define RANDOM_SELCTION_H
#include <QWidget>
#include <QPainter>
#include <QTimer>
#include <QPropertyAnimation>
class CRandomSelector : public QWidget
{
Q_OBJECT
Q_PROPERTY(double deviation READ deviation WRITE setDeviation NOTIFY sigDeviationChanged)
public:
explicit CRandomSelector(QWidget* parent = Q_NULLPTR);
virtual ~CRandomSelector();
void setRange(int min, int max);
inline int currentValue() const {return m_nCurrentValue; };
void setCurrentValue(int value);
inline double deviation() const { return m_nDeviation; }
void setDeviation(double deviation);
void startSelection();
protected:
void paintEvent(QPaintEvent* event);
void paintNum(QPainter& painter, int num, double deviation);
// adjust select num to center
void adjustCurrentValueToCenter();
signals:
void sigValueChanged(int value);
void sigDeviationChanged(double deviation);
void sigFinishedSelection(int value);
private:
int m_nMinValue = 0;
int m_nMaxValue = 100;
int m_nCurrentValue = 0;
double m_nDeviation = 0.0;
int m_nNumSize = 4; //偏移量
const int m_nInterval = 1; //显示内容(数字)的间隔
const int m_nShowRowNum = 3; //显示的行数
QVector<QString> m_vecUsers;
QPropertyAnimation* m_pRollingAnimat