plancard.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. struct PlanInfo
  25. {
  26. enum_WeekDay onWeekDay; /* 周几 */
  27. QDateTime onDateTime; /* 时间 */
  28. enum_WeekDay offWeekDay; /* 周几 */
  29. QDateTime offDateTime; /* 时间 */
  30. PlanInfo();
  31. PlanInfo(const PlanInfo& info);
  32. PlanInfo& operator=(const PlanInfo& info);
  33. bool operator==(const PlanInfo& info) const;
  34. };
  35. /**
  36. * @brief 自定义排序类
  37. *
  38. */
  39. class CSortModel : public QSortFilterProxyModel
  40. {
  41. Q_OBJECT
  42. public:
  43. explicit CSortModel(QObject *parent = nullptr) : QSortFilterProxyModel(parent) {}
  44. ~CSortModel() {}
  45. protected:
  46. /* 重载比较函数 */
  47. bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
  48. };
  49. class PlanCard : public QWidget
  50. {
  51. Q_OBJECT
  52. public:
  53. explicit PlanCard(QWidget *parent = nullptr);
  54. ~PlanCard();
  55. /* 设置频率信息 */
  56. void setChannelInfo(const ChannelInfo& info);
  57. /* 获取频率信息 */
  58. ChannelInfo& getChannelInfo() { return m_channelInfo; }
  59. /* 添加一项,这里的一项是开机和关机单独的一个时间 */
  60. void addPlanItem(const PlanInfo& info);
  61. /* 删除一项 */
  62. void deletePlanItem(const enum_WeekDay weekDay, const QDateTime& time, const enum_OnOff onOff);
  63. /* 删除一项,传入行号 */
  64. PlanInfo deletePlanItem(const int row);
  65. /* 修改一项 */
  66. PlanInfo modifyPlanItem(const int row, const PlanInfo& info);
  67. /* 清空列表 */
  68. void clearPlanItem();
  69. /* 取出所有的计划信息,用于给WebAPI发送数据 */
  70. void getAllPlanInfo(QList<OnePlanItemInfo>& list);
  71. /* 设置计划列表 */
  72. void setPlanList(const QList<OnePlanItemInfo>& list);
  73. /* 获取计划列表,适用于PlanCard之间传输数据 */
  74. void getPlanList(QList<PlanInfo>& list);
  75. /* 设置计划列表,适用于PlanCard之间传输数据 */
  76. void setPlanList(const QList<PlanInfo>& list);
  77. /* 获取选中的行 */
  78. int getSelectedRow() const;
  79. PlanInfo getSelectedPlan();
  80. /* 获取计划是否为空 */
  81. bool isPlanEmpty() const { return m_isSpace; }
  82. /* 设置自身被选中 */
  83. void setSelected(bool isSelected);
  84. /* 自身被点击了,给外部调用,发送点击信号 */
  85. void clickedCard();
  86. signals:
  87. /* 点击了一个单元格 */
  88. void signal_clickedItem(PlanInfo& info);
  89. /* Card被点击了 */
  90. void signal_clickedCard(int channelID);
  91. private slots:
  92. /* 更改UI外观 */
  93. void do_setUIStyle();
  94. /* 点击了一个单元格,设置高亮一行 */
  95. void do_tableView_clicked(const QModelIndex& index);
  96. private:
  97. /* 设置空白图片和文字的位置 */
  98. void setSpaceImageAndTextRect();
  99. /* 根据日期获取字符串 */
  100. QString getDateString(const enum_WeekDay weekDay, const QDateTime& time);
  101. /* 设置表格大小 */
  102. void setTableViewSize();
  103. protected:
  104. /* 绘制事件 */
  105. void paintEvent(QPaintEvent *event) override;
  106. /* 大小缩放事件 */
  107. void resizeEvent(QResizeEvent *event) override;
  108. /* 显示事件 */
  109. void showEvent(QShowEvent *event) override;
  110. /* 鼠标点击事件 */
  111. void mousePressEvent(QMouseEvent *event) override;
  112. /* 事件过滤器 */
  113. bool eventFilter(QObject *watched, QEvent *event) override;
  114. private:
  115. Ui::PlanCard *ui;
  116. ChannelInfo m_channelInfo; /* 频率信息 */
  117. QStandardItemModel* m_model; /* 表格模型,存储数据 */
  118. CSortModel* m_sortModel; /* 排序模型 */
  119. bool m_isSpace = true; /* 计划是否为空 */
  120. QRect m_rectSpaceImage; /* 空白图片的矩形区域 */
  121. QRect m_rectSpaceText; /* 空白文字的矩形区域 */
  122. QPixmap m_spaceImage; /* 空白图片 */
  123. };
  124. #endif // PLANCARD_H