You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PayloadAPP/rescueload.h

125 lines
3.1 KiB
C

#ifndef RESCUELOAD_H
#define RESCUELOAD_H
#include "qjsonarray.h"
#include "qtmetamacros.h"
#include <QObject>
#include <QString>
#include <QUdpSocket>
#include <QAbstractItemModel>
#include <QMouseEvent>
/**
* @brief
* ImsiData:
* ImsiTableModel: Imsi
* RescueLoad:
*/
//搜救载荷移动身份识别码数据
// typedef struct
class ImsiData
{
public:
static QHash<QString, QString> operatorMap;
static QString getOperatorNameByImsi(QString imsi);
public:
ImsiData(){};
ImsiData(const QJsonObject& json);
ImsiData(const ImsiData& from);
~ImsiData(){};
public:
QString latitude;
QString longitude;
int altitude; // 海拔高度
QString createDate;
int rssi; // 强度
QString fcn; // 频点/BAND
QString imsi;
QString operatorName;
} /*ImsiData*/;
class ImsiTableModel : public QAbstractTableModel
{
Q_OBJECT
public:
enum RoleNames {
imsiRole = Qt::UserRole,
latitudeRole = Qt::UserRole+2,
longitudeRole = Qt::UserRole+3,
altitudeRole = Qt::UserRole+4,
dateRole = Qt::UserRole+5,
rssiRole = Qt::UserRole+6,
fcnRole = Qt::UserRole+7,
operatorRole = Qt::UserRole+8,
};
public:
explicit ImsiTableModel(QObject *parent = nullptr);
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
void setDataMap(const QMap<QString, ImsiData>& dataMap ) {
beginResetModel();
this->dataMap = dataMap;
this->imsiList = dataMap.keys();
endResetModel();
}
QMap<QString, ImsiData> getDataMap(){
return dataMap;
}
protected:
// return the roles mapping to be used by QML
virtual QHash<int, QByteArray> roleNames() const override;
private:
QMap<QString, ImsiData> dataMap;
QList<QString> imsiList;
QHash<int, QByteArray> m_roleNames;
QStringList m_horizontalHeader;
};
class RescueLoad: public QObject
{
Q_OBJECT
public:
RescueLoad(QObject *parent);
~RescueLoad();
private:
QMap<QString, ImsiData> dataMap;
// udp通信
public:
void startCommunication(); // 在工作线程中运行
void sendMessage(const QString &message);
void sendMessage(const QByteArray &datagram);
void syncTime();
void sendNameList(const QString action, const QString type, const QList<QString> &wnamelist, const QList<QString> &bnamelist);
const QMap<QString, ImsiData> getDataMap() const;
signals:
void dataUpdate();
private slots:
void readData();
private:
QUdpSocket* udpSocket;
QString remoteIp;
int remotePort;
void handleMessage(const QByteArray &datagram);
};
#endif // RESCUELOAD_H