plancard.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #ifndef PLANCARD_H
  2. #define PLANCARD_H
  3. #include <QWidget>
  4. #include <QStandardItemModel>
  5. #include <QSortFilterProxyModel>
  6. #include "TransmitterSwitchInfo.h"
  7. namespace Ui {
  8. class PlanCard;
  9. }
  10. /**
  11. * @brief 用户枚举值
  12. *
  13. */
  14. enum QtUserRole
  15. {
  16. UserRole_WeekDay = Qt::UserRole + 1, /* 周几 */
  17. UserRole_Time, /* 时间 */
  18. UserRole_OnOff /* 开关机 */
  19. };
  20. /**
  21. * @brief 自定义排序类
  22. *
  23. */
  24. class CSortModel : public QSortFilterProxyModel
  25. {
  26. Q_OBJECT
  27. public:
  28. explicit CSortModel(QObject *parent = nullptr) : QSortFilterProxyModel(parent) {}
  29. ~CSortModel() {}
  30. protected:
  31. /* 重载比较函数 */
  32. bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
  33. };
  34. class PlanCard : public QWidget
  35. {
  36. Q_OBJECT
  37. public:
  38. explicit PlanCard(QWidget *parent = nullptr);
  39. ~PlanCard();
  40. /* 设置频率信息 */
  41. void setChannelInfo(const ChannelInfo& info);
  42. /* 获取频率信息 */
  43. ChannelInfo& getChannelInfo() { return m_channelInfo; }
  44. /* 添加一项,这里的一项是开机和关机单独的一个时间 */
  45. void addPlanItem(const enum_WeekDay weekDay, const QDateTime& time, const enum_OnOff onOff);
  46. /* 删除一项 */
  47. void deletePlanItem(const enum_WeekDay weekDay, const QDateTime& time, const enum_OnOff onOff);
  48. /* 取出所有的计划信息 */
  49. void getAllPlanInfo(QList<ExecPlanItemInfo>& list);
  50. /* 设置计划列表 */
  51. void setPlanList(const QList<ExecPlanItemInfo>& list);
  52. private slots:
  53. /* 更改UI外观 */
  54. void do_setUIStyle();
  55. private:
  56. /* 设置空白图片和文字的位置 */
  57. void setSpaceImageAndTextRect();
  58. protected:
  59. /* 绘制事件 */
  60. void paintEvent(QPaintEvent *event) override;
  61. /* 大小缩放事件 */
  62. void resizeEvent(QResizeEvent *event) override;
  63. /* 显示事件 */
  64. void showEvent(QShowEvent *event) override;
  65. private:
  66. Ui::PlanCard *ui;
  67. ChannelInfo m_channelInfo; /* 频率信息 */
  68. QStandardItemModel* m_model; /* 表格模型,存储数据 */
  69. CSortModel* m_sortModel; /* 排序模型 */
  70. bool m_isSpace = true; /* 计划是否为空 */
  71. QRect m_rectSpaceImage; /* 空白图片的矩形区域 */
  72. QRect m_rectSpaceText; /* 空白文字的矩形区域 */
  73. QPixmap m_spaceImage; /* 空白图片 */
  74. };
  75. #endif // PLANCARD_H