卫星终端控制软件_V1.0.4
1、增加号码记录保存,最多保存10条,保存最新的十条; 2、解决方位俯仰显示位置不对的bug 3、优化直方图/方位图的显示
This commit is contained in:
262
RecordQuery.cpp
262
RecordQuery.cpp
@@ -5,6 +5,18 @@
|
||||
|
||||
#include "ui_RecordQuery.h"
|
||||
|
||||
#define LIMIT_NUMBER_COUNT 10 //限制号码条目数量
|
||||
|
||||
// 返回列名
|
||||
const char* columnName(NumberKind k) {
|
||||
switch (k) {
|
||||
case NumberKind::Call: return "callnumber";
|
||||
case NumberKind::USMsg: return "u_s_msgnumber";
|
||||
case NumberKind::BdMsg: return "bd_msgnumber";
|
||||
}
|
||||
return "callnumber";
|
||||
}
|
||||
|
||||
RecordQuery::RecordQuery(QWidget *parent)
|
||||
: QWidget(parent)
|
||||
, ui(new Ui::RecordQuery)
|
||||
@@ -24,24 +36,242 @@ RecordQuery::~RecordQuery()
|
||||
delete ui;
|
||||
}
|
||||
void RecordQuery::InitDatabase(){
|
||||
std::string db_path = QCoreApplication::applicationDirPath().toStdString() + "/record.db";
|
||||
if(!std::filesystem::exists(db_path)){
|
||||
sqlite3pp::database db(db_path.c_str());
|
||||
std::string sql = R"(CREATE TABLE record (
|
||||
id INTEGER PRIMARY KEY,
|
||||
begin_time TEXT NOT NULL,
|
||||
channel INTEGER,
|
||||
type INTEGER,
|
||||
direction INTEGER,
|
||||
number TEXT,
|
||||
call_duration INTEGER,
|
||||
content TEXT
|
||||
);)";
|
||||
sqlite3pp::command cmd(db, sql.c_str());
|
||||
const std::string db_path =
|
||||
(QCoreApplication::applicationDirPath() + "/record.db").toStdString();
|
||||
|
||||
// 1. 无条件打开/创建数据库文件(SQLite 会在不存在时创建)
|
||||
m_db = std::make_shared<sqlite3pp::database>(db_path.c_str());
|
||||
|
||||
// 2. 始终执行 IF NOT EXISTS,确保表存在
|
||||
const char* sql = R"(CREATE TABLE IF NOT EXISTS record (
|
||||
id INTEGER PRIMARY KEY,
|
||||
begin_time TEXT NOT NULL,
|
||||
channel INTEGER,
|
||||
type INTEGER,
|
||||
direction INTEGER,
|
||||
number TEXT,
|
||||
call_duration INTEGER,
|
||||
content TEXT
|
||||
);)";
|
||||
sqlite3pp::command cmd(*m_db, sql);
|
||||
const int rc = cmd.execute();
|
||||
if (rc != SQLITE_OK) {
|
||||
QMessageBox::information(this, "错误", "数据表Record创建失败");
|
||||
}
|
||||
|
||||
//电话记录表格
|
||||
ensureSchema(*m_db);
|
||||
ensureKeepTop20Triggers(*m_db);
|
||||
}
|
||||
|
||||
// ------------------------ 架构初始化(表 + 唯一索引) ------------------------
|
||||
|
||||
void RecordQuery::ensureSchema(sqlite3pp::database& db) {
|
||||
// 创建表(如果不存在)
|
||||
{
|
||||
const char* sql =
|
||||
"CREATE TABLE IF NOT EXISTS numberRecord ("
|
||||
" id INTEGER PRIMARY KEY,"
|
||||
" callnumber TEXT,"
|
||||
" u_s_msgnumber TEXT,"
|
||||
" bd_msgnumber TEXT"
|
||||
");";
|
||||
sqlite3pp::command cmd(db, sql);
|
||||
cmd.execute();
|
||||
}
|
||||
m_db = std::make_shared<sqlite3pp::database>(db_path.c_str());
|
||||
|
||||
// 为每列创建“非空唯一索引”,保证同一类号码不重复
|
||||
{
|
||||
sqlite3pp::command idx1(
|
||||
db,
|
||||
"CREATE UNIQUE INDEX IF NOT EXISTS idx_callnumber_unique "
|
||||
"ON numberRecord(callnumber) "
|
||||
"WHERE callnumber IS NOT NULL;"
|
||||
);
|
||||
idx1.execute();
|
||||
}
|
||||
{
|
||||
sqlite3pp::command idx2(
|
||||
db,
|
||||
"CREATE UNIQUE INDEX IF NOT EXISTS idx_us_msgnumber_unique "
|
||||
"ON numberRecord(u_s_msgnumber) "
|
||||
"WHERE u_s_msgnumber IS NOT NULL;"
|
||||
);
|
||||
idx2.execute();
|
||||
}
|
||||
{
|
||||
sqlite3pp::command idx3(
|
||||
db,
|
||||
"CREATE UNIQUE INDEX IF NOT EXISTS idx_bd_msgnumber_unique "
|
||||
"ON numberRecord(bd_msgnumber) "
|
||||
"WHERE bd_msgnumber IS NOT NULL;"
|
||||
);
|
||||
idx3.execute();
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------ 触发器:每类仅保留最新N条-----------------------
|
||||
|
||||
void RecordQuery::ensureKeepTop20Triggers(sqlite3pp::database& db) {
|
||||
// 对 callnumber 生效的触发器
|
||||
{
|
||||
QString qsql = QStringLiteral(
|
||||
"CREATE TRIGGER IF NOT EXISTS trg_keep_callnumber "
|
||||
"AFTER INSERT ON numberRecord "
|
||||
"BEGIN "
|
||||
" DELETE FROM numberRecord "
|
||||
" WHERE callnumber IS NOT NULL "
|
||||
" AND id NOT IN ("
|
||||
" SELECT id FROM numberRecord "
|
||||
" WHERE callnumber IS NOT NULL "
|
||||
" ORDER BY id DESC LIMIT %1"
|
||||
" );"
|
||||
"END;"
|
||||
).arg(LIMIT_NUMBER_COUNT);
|
||||
QByteArray ba = qsql.toUtf8();
|
||||
sqlite3pp::command cmd(db, ba.constData());
|
||||
cmd.execute();
|
||||
}
|
||||
|
||||
// 对 u_s_msgnumber 生效的触发器
|
||||
{
|
||||
QString qsql = QStringLiteral(
|
||||
"CREATE TRIGGER IF NOT EXISTS trg_keep_us "
|
||||
"AFTER INSERT ON numberRecord "
|
||||
"BEGIN "
|
||||
" DELETE FROM numberRecord "
|
||||
" WHERE u_s_msgnumber IS NOT NULL "
|
||||
" AND id NOT IN ("
|
||||
" SELECT id FROM numberRecord "
|
||||
" WHERE u_s_msgnumber IS NOT NULL "
|
||||
" ORDER BY id DESC LIMIT %1"
|
||||
" );"
|
||||
"END;"
|
||||
).arg(LIMIT_NUMBER_COUNT);
|
||||
QByteArray ba = qsql.toUtf8();
|
||||
sqlite3pp::command cmd(db, ba.constData());
|
||||
cmd.execute();
|
||||
}
|
||||
|
||||
// 对 bd_msgnumber 生效的触发器
|
||||
{
|
||||
QString qsql = QStringLiteral(
|
||||
"CREATE TRIGGER IF NOT EXISTS trg_keep_bd "
|
||||
"AFTER INSERT ON numberRecord "
|
||||
"BEGIN "
|
||||
" DELETE FROM numberRecord "
|
||||
" WHERE bd_msgnumber IS NOT NULL "
|
||||
" AND id NOT IN ("
|
||||
" SELECT id FROM numberRecord "
|
||||
" WHERE bd_msgnumber IS NOT NULL "
|
||||
" ORDER BY id DESC LIMIT %1"
|
||||
" );"
|
||||
"END;"
|
||||
).arg(LIMIT_NUMBER_COUNT);
|
||||
QByteArray ba = qsql.toUtf8();
|
||||
sqlite3pp::command cmd(db, ba.constData());
|
||||
cmd.execute();
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------ 业务函数:保存 / 查询 / 清空 ------------------------
|
||||
|
||||
// 保存号码(若已存在则替换为最新一条),依赖唯一索引与触发器
|
||||
bool RecordQuery::saveNumber(NumberKind kind, const QString& number) {
|
||||
if (number.isEmpty()) return false;
|
||||
|
||||
const char* col = columnName(kind);
|
||||
std::string sql = std::string("INSERT OR REPLACE INTO numberRecord (") + col + ") VALUES (?);";
|
||||
|
||||
sqlite3pp::command cmd(*m_db, sql.c_str());
|
||||
|
||||
// 转为 UTF-8,并按 sqlite3pp 需要的重载传入
|
||||
const QByteArray ba = number.toUtf8();
|
||||
// 注意:sqlite3pp 的 bind 索引从 1 开始,表示第一个参数
|
||||
int rc = cmd.bind(1, ba.constData(), ba.size(), sqlite3pp::copy);
|
||||
if (rc != SQLITE_OK) return false;
|
||||
|
||||
return cmd.execute() == SQLITE_OK;
|
||||
}
|
||||
|
||||
// 查询某类号码,按“新到旧”(id DESC)。触发器已保证最多20条
|
||||
QStringList RecordQuery::queryNumbers(NumberKind kind, int limit) {
|
||||
const char* col = columnName(kind);
|
||||
std::string sql =
|
||||
"SELECT " + std::string(col) +
|
||||
" FROM numberRecord WHERE " + std::string(col) + " IS NOT NULL "
|
||||
" ORDER BY id DESC LIMIT ?;";
|
||||
|
||||
sqlite3pp::query qry(*m_db, sql.c_str());
|
||||
qry.bind(1, limit);
|
||||
|
||||
QStringList out;
|
||||
for (auto v : qry) {
|
||||
std::string val;
|
||||
v.getter() >> val;
|
||||
out << QString::fromStdString(val);
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
// 清空某一类号码(删除该列非空的记录)
|
||||
bool RecordQuery::clearNumbers(NumberKind kind) {
|
||||
const char* col = columnName(kind);
|
||||
std::string sql = "DELETE FROM numberRecord WHERE " + std::string(col) + " IS NOT NULL;";
|
||||
sqlite3pp::command cmd(*m_db, sql.c_str());
|
||||
return cmd.execute() == SQLITE_OK;
|
||||
}
|
||||
|
||||
// ------------------------ UI集成:QComboBox 下拉列表 ------------------------
|
||||
// - 第一项固定为“清空记录”
|
||||
// - 其余为最近号码(新到旧)
|
||||
// - 用户选择第一项 => 弹出确认框,确认后清空并刷新
|
||||
|
||||
void RecordQuery::refreshNumberCombo(QComboBox* combo, NumberKind kind) {
|
||||
int limit = LIMIT_NUMBER_COUNT; //
|
||||
const auto lst = queryNumbers(kind, limit);
|
||||
combo->clear();
|
||||
if(!lst.isEmpty())
|
||||
{
|
||||
combo->addItem(QStringLiteral("清空记录")); // 虚拟操作项
|
||||
for (const auto& s : lst) combo->addItem(s);
|
||||
combo->setCurrentIndex(1); // 不默认选中任何项
|
||||
}
|
||||
}
|
||||
|
||||
void RecordQuery::setupNumberCombo(QObject* owner, QComboBox* combo, NumberKind kind) {
|
||||
|
||||
refreshNumberCombo(combo, kind);
|
||||
|
||||
QObject::connect(combo, QOverload<int>::of(&QComboBox::activated), owner,
|
||||
[combo, kind, this](int index) {
|
||||
if (index == 0) {
|
||||
auto ret = QMessageBox::question(
|
||||
combo,
|
||||
QStringLiteral("确认"),
|
||||
QStringLiteral("是否清空该类号码记录?"),
|
||||
QMessageBox::Yes | QMessageBox::No
|
||||
);
|
||||
if (ret == QMessageBox::Yes) {
|
||||
if (!clearNumbers(kind)) {
|
||||
QMessageBox::warning(combo, QStringLiteral("提示"), QStringLiteral("清空失败"));
|
||||
}
|
||||
refreshNumberCombo(combo, kind);
|
||||
} else {
|
||||
combo->setCurrentIndex(-1);
|
||||
}
|
||||
} else if (index > 0) {
|
||||
// 选中某个号码(可把值写回到对应的 QLineEdit)
|
||||
const QString number = combo->itemText(index);
|
||||
// 示例:
|
||||
// if (auto lineEdit = combo->parent()->findChild<QLineEdit*>("yourLineEditObjectName")) {
|
||||
// lineEdit->setText(number);
|
||||
// }
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
void RecordQuery::InsertRecord(const Record& record) {
|
||||
std::string sql = "INSERT INTO record(begin_time,channel,type,direction,number,call_duration,content) VALUES (?,?,?,?,?,?,?);";
|
||||
sqlite3pp::command cmd(*m_db, sql.c_str());
|
||||
@@ -49,8 +279,8 @@ void RecordQuery::InsertRecord(const Record& record) {
|
||||
<< int(record.channel) << int(record.type) << int(record.direction)
|
||||
<< record.number.toStdString() << int(record.callDuration) << record.content.toStdString();
|
||||
cmd.execute();
|
||||
|
||||
}
|
||||
|
||||
void RecordQuery::InsertRecords(const std::vector<Record>& data){
|
||||
for(const auto& r : data){
|
||||
InsertRecord(r);
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <QDateTime>
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
#include <qcombobox.h>
|
||||
|
||||
#include "spdlog/spdlog.h"
|
||||
#include "sqlite3pp.h"
|
||||
@@ -46,6 +47,10 @@ struct DbRecord{
|
||||
int callDuration;//s
|
||||
};
|
||||
|
||||
// ------------------------ 基础工具与枚举 ------------------------
|
||||
|
||||
enum class NumberKind { Call, USMsg, BdMsg };
|
||||
|
||||
|
||||
namespace Ui {
|
||||
class RecordQuery;
|
||||
@@ -61,6 +66,9 @@ public:
|
||||
~RecordQuery();
|
||||
void InsertRecord(const Record& data);
|
||||
void InsertRecords(const std::vector<Record>& data);
|
||||
bool saveNumber(NumberKind kind, const QString& number);
|
||||
void refreshNumberCombo(QComboBox* combo, NumberKind kind);
|
||||
void setupNumberCombo(QObject* owner, QComboBox* combo, NumberKind kind);
|
||||
private slots:
|
||||
void on_btnQuery_clicked();
|
||||
|
||||
@@ -92,6 +100,11 @@ private:
|
||||
std::shared_ptr<spdlog::logger> m_logger;
|
||||
|
||||
void InitDatabase();
|
||||
void ensureSchema(sqlite3pp::database& db);
|
||||
void ensureKeepTop20Triggers(sqlite3pp::database& db);
|
||||
QStringList queryNumbers(NumberKind kind, int limit);
|
||||
bool clearNumbers(NumberKind kind);
|
||||
|
||||
void UpdateRecordList(const std::vector<DbRecord>& r);
|
||||
|
||||
QString getQueryCondition(bool isCountQuery = false);
|
||||
|
||||
@@ -35,7 +35,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent), ui(new Ui::MainWindow) {
|
||||
ui->setupUi(this);
|
||||
|
||||
setWindowTitle("卫星终端控制软件_V1.0.3");
|
||||
setWindowTitle("卫星终端控制软件_V1.0.4");
|
||||
|
||||
//创建logger窗口
|
||||
m_loggerWidget = std::make_shared<LoggerWidget>();//需要在RecordQuery创建前
|
||||
@@ -124,6 +124,13 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
//test();
|
||||
// QString s = "你是谁";
|
||||
// m_logger->info(u8"{}---{}---{}",1,u8"水电费",s.toStdString());
|
||||
|
||||
ui->tabWidget->setCurrentIndex(0); //tab默认显示rdss tab
|
||||
|
||||
m_recordQueryWidget->setupNumberCombo(this, ui->cmbCallNumber, NumberKind::Call);
|
||||
m_recordQueryWidget->setupNumberCombo(this, ui->cmbMessageNumberForUhfAndS, NumberKind::USMsg);
|
||||
m_recordQueryWidget->setupNumberCombo(this, ui->cmbMessageNumberForBeiDou, NumberKind::BdMsg);
|
||||
|
||||
}
|
||||
|
||||
MainWindow::~MainWindow() { delete ui; }
|
||||
@@ -425,8 +432,13 @@ void MainWindow::createBeiDouSignalStrengthChart() {
|
||||
m_signalStrengthChart->addAxis(m_signalStrengthChartYAxis, Qt::AlignLeft);
|
||||
// series->attachAxis(axisY);
|
||||
|
||||
// 减小图表边距 - 这是关键设置
|
||||
m_signalStrengthChart->setMargins(QMargins(0, 0, 0, 0)); // 左上右下全部设为0
|
||||
|
||||
QChartView *chartView = new QChartView(m_signalStrengthChart, this);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
// 设置ChartView的边距
|
||||
chartView->setContentsMargins(0, 0, 0, 0);
|
||||
ui->vboxChannelBeidouSignalStrength->addWidget(chartView);
|
||||
|
||||
m_stackedSeries = new QStackedBarSeries;
|
||||
@@ -533,8 +545,13 @@ void MainWindow::createBeiDouRDSSSignalStrengthChart() {
|
||||
m_RDS1signalStrengthChart->addAxis(m_RDS1signalStrengthChartYAxis, Qt::AlignLeft);
|
||||
// series->attachAxis(axisY);
|
||||
|
||||
// 减小图表边距 - 这是关键设置
|
||||
m_RDS1signalStrengthChart->setMargins(QMargins(0, 0, 0, 0)); // 左上右下全部设为0
|
||||
|
||||
QChartView *chartView = new QChartView(m_RDS1signalStrengthChart, this);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
// 设置ChartView的边距
|
||||
chartView->setContentsMargins(0, 0, 0, 0);
|
||||
ui->vboxChannelBeidouRDS1SignalStrength->addWidget(chartView);
|
||||
|
||||
m_RDS2signalStrengthChart = new QChart;
|
||||
@@ -551,8 +568,13 @@ void MainWindow::createBeiDouRDSSSignalStrengthChart() {
|
||||
m_RDS2signalStrengthChart->addAxis(m_RDS2signalStrengthChartYAxis, Qt::AlignLeft);
|
||||
// series->attachAxis(axisY);
|
||||
|
||||
// 减小图表边距 - 这是关键设置
|
||||
m_RDS2signalStrengthChart->setMargins(QMargins(0, 0, 0, 0)); // 左上右下全部设为0
|
||||
|
||||
QChartView *chartView2 = new QChartView(m_RDS2signalStrengthChart, this);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
// 设置ChartView的边距
|
||||
chartView->setContentsMargins(0, 0, 0, 0);
|
||||
ui->vboxChannelBeidouRDS2SignalStrength->addWidget(chartView2);
|
||||
}
|
||||
void MainWindow::setRDSSSignalStrengthValues(uint8_t type, const QStringList &categories,
|
||||
@@ -644,18 +666,22 @@ void MainWindow::createAzimuthMapChart() {
|
||||
const qreal radialMax = 90;
|
||||
|
||||
m_azimuthChart = new QPolarChart;
|
||||
// m_azimuthChart->setTitle("");
|
||||
//m_azimuthChart->setTitle("");
|
||||
m_azimuthChart->legend()->setVisible(false);
|
||||
|
||||
// 减小图表边距 - 这是关键设置
|
||||
m_azimuthChart->setMargins(QMargins(0, 0, 0, 0)); // 左上右下全部设为0
|
||||
|
||||
auto angularAxis = new QValueAxis;
|
||||
angularAxis->setTickCount(9);
|
||||
angularAxis->setLabelFormat("%.1f");
|
||||
angularAxis->setLabelFormat("%d");
|
||||
angularAxis->setShadesVisible(true);
|
||||
angularAxis->setShadesBrush(QBrush(QColor(249, 249, 255)));
|
||||
m_azimuthChart->addAxis(angularAxis, QPolarChart::PolarOrientationAngular);
|
||||
|
||||
auto radialAxis = new QValueAxis;
|
||||
radialAxis->setTickCount(7);
|
||||
|
||||
radialAxis->setLabelFormat("%d");
|
||||
m_azimuthChart->addAxis(radialAxis, QPolarChart::PolarOrientationRadial);
|
||||
|
||||
@@ -664,14 +690,26 @@ void MainWindow::createAzimuthMapChart() {
|
||||
|
||||
QChartView *chartView = new QChartView(m_azimuthChart, this);
|
||||
chartView->setRenderHint(QPainter::Antialiasing);
|
||||
|
||||
// 设置ChartView的边距
|
||||
chartView->setContentsMargins(0, 0, 0, 0);
|
||||
|
||||
ui->vboxAzimuthMap->addWidget(chartView);
|
||||
}
|
||||
void MainWindow::setAzimuthValues(const QList<QPointF> &points) {
|
||||
m_azimuthChart->removeAllSeries();
|
||||
auto series = new QScatterSeries;
|
||||
series->setName("方位");
|
||||
//series->setName("方位");
|
||||
//series->setMarkerShape(QScatterSeries::MarkerShapeCircle); // 可选:圆形
|
||||
series->setMarkerSize(10.0);
|
||||
series->append(points);
|
||||
m_azimuthChart->addSeries(series);
|
||||
|
||||
// 关联到已存在的极坐标轴
|
||||
for (QAbstractAxis* ax : m_azimuthChart->axes(QPolarChart::PolarOrientationAngular))
|
||||
series->attachAxis(ax);
|
||||
for (QAbstractAxis* ax : m_azimuthChart->axes(QPolarChart::PolarOrientationRadial))
|
||||
series->attachAxis(ax);
|
||||
}
|
||||
//--------------------------------------------------------------------------------------
|
||||
// 消息列表操作
|
||||
@@ -868,6 +906,11 @@ void MainWindow::on_btnCallAnswer_clicked() {
|
||||
if(!r.first){
|
||||
return;
|
||||
}
|
||||
if (m_recordQueryWidget->saveNumber(NumberKind::Call, number)) {
|
||||
//QMessageBox::information(this, "提示", "保存成功");
|
||||
// 触发器已保证只保留最新10条
|
||||
m_recordQueryWidget->refreshNumberCombo(ui->cmbCallNumber, NumberKind::Call);
|
||||
}
|
||||
m_currentTalkingDirection = CommDirection::Send;
|
||||
if(r.second == Channel::Uhf){
|
||||
sendUdpMessage(pack_uhf_dial_cmd(number.toStdString()));
|
||||
@@ -914,6 +957,11 @@ void MainWindow::on_btnSendMessageByUhfOrS_clicked() {
|
||||
if(!r.first){
|
||||
return;
|
||||
}
|
||||
if (m_recordQueryWidget->saveNumber(NumberKind::USMsg, number)) {
|
||||
//QMessageBox::information(this, "提示", "保存成功");
|
||||
// 触发器已保证只保留最新10条
|
||||
m_recordQueryWidget->refreshNumberCombo(ui->cmbMessageNumberForUhfAndS, NumberKind::USMsg);
|
||||
}
|
||||
if(r.second == Channel::Uhf){
|
||||
sendUdpMessage(pack_uhf_short_message_cmd(number.toStdString(),message.toStdU16String()));
|
||||
}else if(r.second == Channel::S){
|
||||
@@ -931,6 +979,11 @@ void MainWindow::on_btnSendMessageByBeiDou_clicked()
|
||||
if(!checkMessage(message)){
|
||||
return;
|
||||
}
|
||||
if (m_recordQueryWidget->saveNumber(NumberKind::BdMsg, number)) {
|
||||
//QMessageBox::information(this, "提示", "保存成功");
|
||||
// 触发器已保证只保留最新10条
|
||||
m_recordQueryWidget->refreshNumberCombo(ui->cmbMessageNumberForBeiDou, NumberKind::BdMsg);
|
||||
}
|
||||
sendUdpMessage(pack_beidou_short_message_cmd(number.toStdString(),message.toStdU16String()));
|
||||
}
|
||||
|
||||
@@ -1396,7 +1449,7 @@ void MainWindow::processSearchSatelliteStatusReport(const QByteArray& cmd){
|
||||
status.number = cmd[data_index++];//卫星编号
|
||||
status.locate_flag = cmd[data_index++];//卫星定位标志
|
||||
status.snr = cmd[data_index++];//卫星信噪比
|
||||
status.azimuth = qFromLittleEndian<quint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));//卫星方位角
|
||||
status.azimuth = qFromBigEndian<quint16>(reinterpret_cast<const uchar*>(cmd.constData()+data_index));//卫星方位角
|
||||
data_index += 2;
|
||||
status.pitch = cmd[data_index++];//卫星俯仰角
|
||||
all_satellite_status.push_back(status);
|
||||
|
||||
121
mainwindow.ui
121
mainwindow.ui
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1893</width>
|
||||
<height>1142</height>
|
||||
<width>1620</width>
|
||||
<height>980</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -24,6 +24,21 @@
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_27" stretch="0,0,0">
|
||||
<item>
|
||||
@@ -400,7 +415,7 @@
|
||||
<item>
|
||||
<widget class="QTextEdit" name="txtCurrentItemMessageContent">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
@@ -408,6 +423,9 @@
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@@ -461,6 +479,21 @@
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupSatelliteStatus">
|
||||
<property name="title">
|
||||
@@ -941,30 +974,48 @@
|
||||
<item>
|
||||
<widget class="QTabWidget" name="tabWidget">
|
||||
<property name="currentIndex">
|
||||
<number>0</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<widget class="QWidget" name="tab">
|
||||
<attribute name="title">
|
||||
<string>RDSS卫星</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_53">
|
||||
<property name="title">
|
||||
<string>S1波束</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_71">
|
||||
<property name="leftMargin">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxChannelBeidouRDS1SignalStrength"/>
|
||||
@@ -978,17 +1029,20 @@
|
||||
<string>S2波束</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_72">
|
||||
<property name="leftMargin">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxChannelBeidouRDS2SignalStrength"/>
|
||||
@@ -1002,24 +1056,42 @@
|
||||
<attribute name="title">
|
||||
<string>RNSS卫星</string>
|
||||
</attribute>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6" stretch="0,0">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_52">
|
||||
<property name="title">
|
||||
<string>直方图</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_70">
|
||||
<property name="leftMargin">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxChannelBeidouSignalStrength"/>
|
||||
@@ -1032,18 +1104,21 @@
|
||||
<property name="title">
|
||||
<string>分布图</string>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_68">
|
||||
<property name="leftMargin">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_68" stretch="0">
|
||||
<property name="spacing">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<property name="leftMargin">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>2</number>
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="vboxAzimuthMap"/>
|
||||
@@ -1163,7 +1238,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1893</width>
|
||||
<width>1620</width>
|
||||
<height>18</height>
|
||||
</rect>
|
||||
</property>
|
||||
|
||||
Reference in New Issue
Block a user