123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- #ifndef PLANCARD_H
- #define PLANCARD_H
- #include <QWidget>
- #include <QStandardItemModel>
- #include <QSortFilterProxyModel>
- #include "TransmitterSwitchInfo.h"
- namespace Ui {
- class PlanCard;
- }
- /**
- * @brief 用户枚举值
- *
- */
- enum QtUserRole
- {
- UserRole_WeekDay = Qt::UserRole + 1, /* 周几 */
- UserRole_Time, /* 时间 */
- UserRole_OnOff /* 开关机 */
- };
- /**
- * @brief 计划信息结构体
- *
- */
- struct PlanInfo
- {
- enum_WeekDay onWeekDay; /* 周几 */
- QDateTime onDateTime; /* 时间 */
- enum_WeekDay offWeekDay; /* 周几 */
- QDateTime offDateTime; /* 时间 */
- PlanInfo();
- PlanInfo(const PlanInfo& info);
- PlanInfo& operator=(const PlanInfo& info);
- bool operator==(const PlanInfo& info) const;
- };
- /**
- * @brief 自定义排序类
- *
- */
- class CSortModel : public QSortFilterProxyModel
- {
- Q_OBJECT
- public:
- explicit CSortModel(QObject *parent = nullptr) : QSortFilterProxyModel(parent) {}
- ~CSortModel() {}
- protected:
- /* 重载比较函数 */
- bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
- };
- class PlanCard : public QWidget
- {
- Q_OBJECT
- public:
- explicit PlanCard(QWidget *parent = nullptr);
- ~PlanCard();
- /* 设置频率信息 */
- void setChannelInfo(const ChannelInfo& info);
- /* 获取频率信息 */
- ChannelInfo& getChannelInfo() { return m_channelInfo; }
- /* 添加一项,这里的一项是开机和关机单独的一个时间 */
- void addPlanItem(const PlanInfo& info);
- /* 删除一项 */
- void deletePlanItem(const enum_WeekDay weekDay, const QDateTime& time, const enum_OnOff onOff);
- /* 删除一项,传入行号 */
- PlanInfo deletePlanItem(const int row);
- /* 修改一项 */
- PlanInfo modifyPlanItem(const int row, const PlanInfo& info);
- /* 清空列表 */
- void clearPlanItem();
- /* 取出所有的计划信息,用于给WebAPI发送数据 */
- void getAllPlanInfo(QList<OnePlanItemInfo>& list);
- /* 设置计划列表 */
- void setPlanList(const QList<OnePlanItemInfo>& list);
- /* 获取计划列表,适用于PlanCard之间传输数据 */
- void getPlanList(QList<PlanInfo>& list);
- /* 设置计划列表,适用于PlanCard之间传输数据 */
- void setPlanList(const QList<PlanInfo>& list);
- /* 获取选中的行 */
- int getSelectedRow() const;
- PlanInfo getSelectedPlan();
- /* 获取计划是否为空 */
- bool isPlanEmpty() const { return m_isSpace; }
- /* 设置自身被选中 */
- void setSelected(bool isSelected);
- /* 自身被点击了,给外部调用,发送点击信号 */
- void clickedCard();
- signals:
- /* 点击了一个单元格 */
- void signal_clickedItem(PlanInfo& info);
- /* Card被点击了 */
- void signal_clickedCard(int channelID);
- private slots:
- /* 更改UI外观 */
- void do_setUIStyle();
- /* 点击了一个单元格,设置高亮一行 */
- void do_tableView_clicked(const QModelIndex& index);
- private:
- /* 设置空白图片和文字的位置 */
- void setSpaceImageAndTextRect();
- /* 根据日期获取字符串 */
- QString getDateString(const enum_WeekDay weekDay, const QDateTime& time);
- /* 设置表格大小 */
- void setTableViewSize();
- protected:
- /* 绘制事件 */
- void paintEvent(QPaintEvent *event) override;
- /* 大小缩放事件 */
- void resizeEvent(QResizeEvent *event) override;
- /* 显示事件 */
- void showEvent(QShowEvent *event) override;
- /* 鼠标点击事件 */
- void mousePressEvent(QMouseEvent *event) override;
- /* 事件过滤器 */
- bool eventFilter(QObject *watched, QEvent *event) override;
- private:
- Ui::PlanCard *ui;
- ChannelInfo m_channelInfo; /* 频率信息 */
- QStandardItemModel* m_model; /* 表格模型,存储数据 */
- CSortModel* m_sortModel; /* 排序模型 */
- bool m_isSpace = true; /* 计划是否为空 */
- QRect m_rectSpaceImage; /* 空白图片的矩形区域 */
- QRect m_rectSpaceText; /* 空白文字的矩形区域 */
- QPixmap m_spaceImage; /* 空白图片 */
- };
- #endif // PLANCARD_H
|