PatternCodeLock.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #ifndef PATTERNCODELOCK_H
  2. #define PATTERNCODELOCK_H
  3. #include <QWidget>
  4. #include <QTimer>
  5. /**
  6. * @brief 图案密码锁,手机锁屏界面
  7. */
  8. class PatternCodeLockWidget : public QWidget
  9. {
  10. Q_OBJECT
  11. public:
  12. PatternCodeLockWidget(int numberOfEachRowAndCol, QWidget *parent = nullptr);
  13. ~PatternCodeLockWidget() override;
  14. void reset();
  15. int getNumberOfEachRowAndCol() const;
  16. void setNumberOfEachRowAndCol(int newNumberOfEachRowAndCol);
  17. signals:
  18. void setPassword(QString);
  19. protected:
  20. void paintEvent(QPaintEvent *event) override;
  21. void resizeEvent(QResizeEvent *event) override;
  22. void mouseMoveEvent(QMouseEvent *event) override;
  23. void mousePressEvent(QMouseEvent *event) override;
  24. void mouseDoubleClickEvent(QMouseEvent *event) override;
  25. private:
  26. void onHoverTimer();
  27. QString getPassWord();
  28. enum class CircularState
  29. {
  30. normal, //正常
  31. hoverOnInnerSamrtCircular //鼠标悬浮在中间的小圆上面
  32. };
  33. enum class PatternCodeLockState
  34. {
  35. notSet,
  36. setting,
  37. setted_valid, //有效
  38. setted_invalid //无效
  39. };
  40. int numberOfEachRowAndCol;
  41. PatternCodeLockState PatternCodeLockSetUpState { PatternCodeLockState::notSet };
  42. QList<CircularState> circularStateList;
  43. QList<QRect> smartCircularRectList;
  44. bool isUpdateSmartCircularRect { true };
  45. QTimer hoverTimer;
  46. int radiu;
  47. int lastHoverIndex { -1 };
  48. int currentchangeLength;
  49. bool mouseInSomeSmartCircular { false };
  50. QList<int> setList;
  51. QPoint settingMousPos;
  52. };
  53. #endif // PATTERNCODELOCK_H