compareitemlistdialog.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #ifndef COMPAREITEMLISTDIALOG_H
  2. #define COMPAREITEMLISTDIALOG_H
  3. #include <QStandardItemModel>
  4. #include <QSortFilterProxyModel>
  5. #include <QTableView>
  6. #include "DialogBase.h"
  7. #include "GlobalVariable.h"
  8. /**
  9. * @brief 自定义排序类
  10. *
  11. */
  12. class CSortModel : public QSortFilterProxyModel
  13. {
  14. Q_OBJECT
  15. public:
  16. explicit CSortModel(QObject *parent = nullptr) : QSortFilterProxyModel(parent) {}
  17. ~CSortModel() {}
  18. protected:
  19. /* 重载比较函数 */
  20. bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
  21. };
  22. /* 点击空白处不会取消选中的QTableView */
  23. class CTableView : public QTableView
  24. {
  25. public:
  26. using QTableView::QTableView;
  27. protected:
  28. void mousePressEvent(QMouseEvent *event) override
  29. {
  30. QModelIndex idx = indexAt(event->pos());
  31. if (!idx.isValid()) {
  32. // 点击空白处,什么都不做
  33. return;
  34. }
  35. QTableView::mousePressEvent(event);
  36. }
  37. };
  38. /**
  39. * @brief 对比项列表弹窗
  40. * 1、对比项具体数据在全局变量中存储,表格中主要存储对比项的ID,用这个ID去查找对比项的具体数据
  41. *
  42. */
  43. namespace Ui {
  44. class CompareItemListWidget;
  45. }
  46. class CompareItemListDialog : public DialogBase
  47. {
  48. Q_OBJECT
  49. public:
  50. explicit CompareItemListDialog(QWidget *parent = nullptr);
  51. ~CompareItemListDialog() override;
  52. /* 设置已有的对比项数据 */
  53. void setCompareItemList(const QList<CompareItemTableItem_t>& list);
  54. private slots:
  55. /* 点击了关闭按钮 */
  56. void do_pBtn_close_Clicked();
  57. /* 点击了添加按钮 */
  58. void do_pBtn_add_Clicked();
  59. /* 点击了删除按钮 */
  60. void do_pBtn_delete_Clicked();
  61. /* 点击了编辑按钮 */
  62. void do_pBtn_edit_Clicked();
  63. /* 启用对比项 */
  64. void do_pBtn_enable_Clicked();
  65. /* 禁用对比项 */
  66. void do_pBtn_disable_Clicked();
  67. /* 显示详情 */
  68. void do_tableView_doubleClicked(const QModelIndex &index);
  69. /* 表格点击了一行 */
  70. void do_tableView_clicked(const QModelIndex &index);
  71. /* 修改了选择行的状态 */
  72. void do_selectChanged(const QItemSelection &selected, const QItemSelection &deselected);
  73. /* 点击了标题栏选择框 */
  74. void do_headerSelect_clicked(bool state);
  75. private:
  76. /* 初始化表格 */
  77. void initTable();
  78. /* 添加一行 */
  79. void addRow(CompareItemTableItem_t tableItem);
  80. private:
  81. Ui::CompareItemListWidget *ui;
  82. QStandardItemModel* m_model; /* 表格模型,存储数据 */
  83. CSortModel* m_sortModel; /* 排序模型 */
  84. const int m_userRole_CompareItemID = Qt::UserRole + 1; /* 自定义角色,用于存储对比项ID */
  85. };
  86. #endif // COMPAREITEMLISTDIALOG_H