-
数据获取
- 从MySQL数据库的plc_alarm_log表中读取报警数据
- 支持定时自动刷新数据
-
数据展示
- 以表格形式展示报警日志
- 支持按时间、报警代码等字段排序
- 支持按报警状态、报警类型等条件筛选
- 支持分页显示
-
报警状态显示
- 不同报警级别使用不同颜色标识
- 支持报警确认功能
- 支持报警历史记录查询
-
系统配置
- 数据库连接配置
- 刷新间隔配置
- 显示列配置
-
性能要求
- 数据加载时间不超过1秒
- 支持大量数据(>10000条)的流畅显示
- 内存占用合理
-
可靠性要求
- 数据库连接异常处理
- 数据加载失败处理
- 系统崩溃恢复
-
可维护性要求
- 代码结构清晰
- 模块化设计
- 完善的注释和文档
PlcAlarmDisplay/
├── model # 模型层
├── view # 视图层
├── control # 控制器层
├── utils # 工具类
├── main.cpp
├── readme.md
└── config.ini
-
AlarmLogEntry 类 (alarmlogentry.h/cpp)
class AlarmLogEntry { public: QDateTime timestamp; // 报警时间 int alarmCode; // 报警代码 QString description; // 报警描述 bool isFinished; // 是否结束 QString area; // 区域 };
-
DBManager 类 (dbmanager.h/cpp)
class DBManager : public QObject { public: bool connect(const QString &host, const QString &dbName, const QString &user, const QString &password); QList<AlarmLogEntry> fetchAlarmLogs(int limit = 1000, int offset = 0); bool acknowledgeAlarm(int alarmId); bool isConnected() const; private: QSqlDatabase m_db; };
-
AlarmLogModel 类 (alarmlogmodel.h/cpp)
class AlarmLogModel : public QAbstractTableModel { public: int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role) const override; QVariant headerData(int section, Qt::Orientation orientation, int role) const override; void updateData(const QList<AlarmLogEntry> &entries); void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) override; private: QList<AlarmLogEntry> m_entries; };
-
MainWindow 类 (mainwindow.h/cpp)
class MainWindow : public QMainWindow { public: MainWindow(QWidget *parent = nullptr); private: void setupUI(); void setupConnections(); QTableView *m_alarmTableView; QPushButton *m_refreshButton; QComboBox *m_filterComboBox; QSpinBox *m_pageSizeSpinBox; };
-
AlarmTableView 类 (alarmtableview.h/cpp)
class AlarmTableView : public QTableView { public: AlarmTableView(QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *event) override; };
- AlarmLogController 类 (alarmlogcontroller.h/cpp)
class AlarmLogController : public QObject { public slots: void onRefreshButtonClicked(); void onFilterChanged(const QString &filter); void onPageSizeChanged(int size); void onAcknowledgeAlarm(int alarmId); private: DBManager *m_dbManager; AlarmLogModel *m_model; void loadData(); };
-
ConfigManager 类 (configmanager.h/cpp)
class ConfigManager { public: static ConfigManager& instance(); void loadConfig(); void saveConfig(); int getRefreshInterval() const; QString getDbHost() const; // ... 其他配置项 };
-
Logger 类 (logger.h/cpp)
class Logger { public: static void log(const QString &message, LogLevel level = LogLevel::Info); };
create table plc_alarm_log(
id int auto_increment primary key,
alarmID int not null,
alarmName varchar(50),
value bool not null,
time timestamp default current_timestamp,
quality int not null);
create table plc_alarm_info(
alarmID int primary key,
msg varchar(100) not null,
area int);