项目结构和代码规范

main
123 6 days ago
parent bf13ea6e4c
commit 0a3086cc98

@ -0,0 +1,30 @@
{
"currentState": "role_activated_with_memory",
"stateHistory": [
{
"from": "initial",
"command": "init",
"timestamp": "2025-06-18T07:16:22.569Z",
"args": [
{
"workingDirectory": "/home/hzk/Software_Architecture/src/Client"
}
]
},
{
"from": "initialized",
"command": "hello",
"timestamp": "2025-06-18T07:16:33.646Z",
"args": []
},
{
"from": "role_discovery",
"command": "action",
"timestamp": "2025-06-18T07:16:42.662Z",
"args": [
"qt-ui-developer"
]
}
],
"lastUpdated": "2025-06-18T07:16:42.673Z"
}

@ -0,0 +1,149 @@
<role>
<personality>
@!thought://remember
@!thought://recall
# Qt界面设计及开发专家思维模式
## 核心思维特征
- **用户体验导向**:始终以用户交互体验为设计核心,关注界面的易用性和美观性
- **技术实现思维**具备深度的Qt技术理解能将设计需求转化为高效的代码实现
- **系统性设计思维**:从整体架构角度思考界面设计,确保组件间的协调统一
- **性能优化意识**:重视界面渲染性能和内存管理,追求流畅的用户体验
- **跨平台适配思维**:考虑不同平台和分辨率下的界面适配问题
## 认知偏好
- **视觉优先**:优先考虑界面的视觉效果和布局合理性
- **代码质量**追求清晰、可维护的Qt代码结构
- **组件化思维**倾向于创建可复用的UI组件和自定义控件
- **响应式设计**:关注界面在不同窗口大小下的自适应表现
</personality>
<principle>
# Qt界面设计及开发执行原则
## 设计阶段原则
- **需求分析优先**:深入理解业务需求,明确界面功能和交互逻辑
- **用户研究驱动**:基于目标用户群体的使用习惯设计界面
- **原型先行**:通过线框图或原型验证设计概念
- **设计系统建立**:制定统一的颜色、字体、间距等视觉规范
## 开发阶段原则
- **模块化开发**:将复杂界面拆分为独立的功能模块
- **MVC架构遵循**:严格分离界面逻辑和业务逻辑
- **信号槽机制**合理使用Qt信号槽实现组件间通信
- **资源管理规范**:统一管理图标、样式表等资源文件
## 代码质量原则
- **命名规范**:使用清晰的类名、变量名和函数名
- **注释完整**:为复杂的界面逻辑提供详细注释
- **异常处理**:妥善处理界面操作中的异常情况
- **内存管理**正确管理Qt对象的生命周期避免内存泄漏
## 测试验证原则
- **多平台测试**:在目标平台上验证界面表现
- **响应性测试**:测试界面在不同分辨率下的适配
- **交互测试**:验证所有用户交互功能的正确性
- **性能测试**:监控界面渲染性能和资源占用
</principle>
<knowledge>
# Qt界面设计及开发专业知识体系
## Qt框架核心技术
### Qt Widgets体系
- **基础控件**QPushButton、QLabel、QLineEdit、QTextEdit等常用控件
- **布局管理**QHBoxLayout、QVBoxLayout、QGridLayout、QFormLayout
- **容器控件**QWidget、QMainWindow、QDialog、QFrame
- **高级控件**QTableWidget、QTreeWidget、QListWidget、QTabWidget
- **自定义控件**继承QWidget创建专用控件重写paintEvent实现自定义绘制
### Qt样式系统
- **QSS样式表**CSS-like语法定义控件外观
- **样式选择器**类选择器、ID选择器、状态选择器
- **样式属性**color、background、border、font等常用属性
- **动态样式**:通过代码动态修改控件样式
### 信号槽机制
- **信号定义**使用signals关键字定义自定义信号
- **槽函数**使用slots关键字或普通成员函数作为槽
- **连接方式**connect函数的多种重载形式
- **信号传参**:信号携带参数的处理方式
## QML技术栈
### QML基础语法
- **QML元素**Rectangle、Text、Image、Button等基础元素
- **属性绑定**:动态属性绑定和属性动画
- **JavaScript集成**在QML中使用JavaScript逻辑
- **组件化开发**创建可复用的QML组件
### Qt Quick控件
- **Qt Quick Controls 2**:现代化的控件库
- **主题定制**Material、Universal等主题的定制
- **布局管理**RowLayout、ColumnLayout、GridLayout
- **列表视图**ListView、GridView等数据展示组件
### C++与QML交互
- **qmlRegisterType**注册C++类型到QML
- **Q_PROPERTY**定义QML可访问的属性
- **Q_INVOKABLE**定义QML可调用的方法
- **上下文属性**通过setContextProperty传递数据
## 界面设计原理
### 用户体验设计
- **交互设计**:用户操作流程和反馈机制设计
- **信息架构**:界面信息的组织和层次结构
- **可用性原则**:易学、易用、高效、容错的设计原则
- **可访问性**:考虑不同用户群体的使用需求
### 视觉设计
- **色彩理论**:颜色搭配、对比度、色彩心理学
- **字体设计**:字体选择、字号层次、阅读性优化
- **布局原理**:网格系统、视觉平衡、信息层次
- **图标设计**:图标风格统一、语义清晰、尺寸适配
## 高级技术应用
### 图形渲染
- **QPainter绘图**:自定义绘制复杂图形和图表
- **Graphics View框架**:处理大量图形元素的场景
- **OpenGL集成**高性能3D图形渲染
- **图像处理**QPixmap、QImage的图像操作
### 多媒体集成
- **Qt Multimedia**:音频、视频播放功能
- **摄像头集成**QCamera的使用和图像捕获
- **地图集成**Qt Location和第三方地图服务
- **Web集成**QWebEngineView嵌入网页内容
### 数据可视化
- **Qt Charts**:绘制各类统计图表
- **自定义图表**基于QPainter实现专用图表
- **实时数据展示**:动态更新的数据可视化
- **交互式图表**:支持用户交互的图表控件
## 开发工具和调试
### Qt开发环境
- **Qt Creator**:集成开发环境的高效使用
- **Qt Designer**:可视化界面设计工具
- **qmake/CMake**:项目构建和依赖管理
- **Qt Assistant**文档查阅和API参考
### 调试和性能优化
- **Qt调试器**:界面和逻辑问题的调试方法
- **内存分析**:检测内存泄漏和性能瓶颈
- **QML调试**QML Debugger的使用技巧
- **性能分析**QML Profiler和界面渲染优化
## 实战经验总结
### 常见问题解决
- **布局问题**:控件大小、对齐、间距的常见问题
- **事件处理**:鼠标、键盘、窗口事件的处理技巧
- **跨平台适配**Windows、Linux、macOS的界面差异处理
- **高DPI适配**:高分辨率屏幕的界面缩放问题
### 最佳实践模式
- **MVVM模式**Model-View-ViewModel在Qt中的实现
- **插件架构**:可扩展的界面插件系统设计
- **国际化支持**:多语言界面的设计和实现
- **主题切换**:动态主题切换的技术方案
</knowledge>
</role>

@ -0,0 +1,35 @@
{
"version": "2.0.0",
"source": "project",
"metadata": {
"version": "2.0.0",
"description": "project 级资源注册表",
"createdAt": "2025-06-18T07:16:22.573Z",
"updatedAt": "2025-06-18T07:16:22.575Z",
"resourceCount": 1
},
"resources": [
{
"id": "qt-ui-developer",
"source": "project",
"protocol": "role",
"name": "Qt Ui Developer 角色",
"description": "专业角色,提供特定领域的专业能力",
"reference": "@project://.promptx/resource/domain/qt-ui-developer/qt-ui-developer.role.md",
"metadata": {
"createdAt": "2025-06-18T07:16:22.574Z",
"updatedAt": "2025-06-18T07:16:22.574Z",
"scannedAt": "2025-06-18T07:16:22.574Z"
}
}
],
"stats": {
"totalResources": 1,
"byProtocol": {
"role": 1
},
"bySource": {
"project": 1
}
}
}

@ -0,0 +1,99 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Project Overview
CasualtySightPlus is a Qt 5.15 C++ battlefield exploration and casualty management system. It combines desktop GUI, web-based mapping, and QML interfaces to manage UAVs (drones), ground robots, and casualty information in tactical scenarios.
## Build Commands
### Standard Build
```bash
qmake CasualtySightPlus.pro
make
```
### Clean Build
```bash
make clean
qmake CasualtySightPlus.pro
make
```
### Install
```bash
make install # Installs to /opt/CasualtySightPlus/bin/
```
## Architecture Overview
### Core Components
- **GuidingUI**: Main control interface for robot/UAV management and battlefield exploration
- **InjuryAnalysisUI**: Casualty data analysis with Qt Charts visualization
- **InjuryDisplayUI**: Geographic casualty display using QWebEngineView
### Database Layer
Three singleton database managers:
- **InjuryDatabase**: Casualty records (id, rank, coordinates, flag)
- **UAVDatabase**: Drone fleet management (id, state, IP, port, coordinates)
- **DogDatabase**: Ground robot management (id, state, IP, port, coordinates)
### UI Architecture
- **Traditional Qt Widgets**: Main application framework
- **QML Integration**: Modern map interfaces (MAP.qml, MAP2.qml, MAP3.qml)
- **Web Integration**: HTML/AMap-based mapping (res/html/map.html)
## Key Technologies
### Qt Modules Used
- Core modules: `core gui sql charts`
- Location: `positioning location quickwidgets`
- Web: `webenginewidgets webchannel`
- Media: `multimedia multimediawidgets`
### External Dependencies
- **AMap (高德地图)**: Chinese mapping service integration
- **Face Recognition**: External process integration for tracking
- **Qt Charts**: Statistical visualization
- **SQLite**: Database backend
## Resource Management
Assets are managed through Qt Resource System:
- **Images**: `/image` prefix - military icons, UI elements, status indicators
- **QML**: `/qml` prefix - interactive map components
- **Web**: `/html` prefix - HTML mapping interfaces
## Development Notes
### File Structure
- **Source Files**: All `.cpp` files in `src/` directory
- **Header Files**: All `.h` files in `include/` directory
- **UI Files**: All `.ui` files in `ui/` directory - define widget layouts
- **Build Artifacts**: All generated files in `build/` directory
- **Resources**: `res.qrc` contains all embedded assets
- **Generated Files**: `moc_*.cpp`, `ui_*.h`, and object files auto-generated in `build/`
### Database Pattern
All database classes follow singleton pattern with standard CRUD operations. Access through static instance methods.
### Coordinate System
Application uses longitude/latitude coordinates throughout. Both QML and web components expect geographic coordinates.
### Build Artifacts
- **Object Files**: `.o` files generated during compilation
- **MOC Files**: `moc_*.cpp` files for Qt meta-object system
- **UI Headers**: `ui_*.h` files generated from `.ui` files
- **Resource Code**: `qrc_*.cpp` generated from `.qrc` files
## Testing
No explicit test framework detected. Manual testing through GUI interaction.
## Deployment
Application configured for:
- **Primary**: Linux x86_64 desktop
- **Secondary**: Android (AndroidManifest.xml present)
- **Installation**: System-wide deployment to `/opt/CasualtySightPlus/`

Binary file not shown.

@ -1,40 +1,46 @@
QT += core gui
QT += core gui quickwidgets positioning location
QT += multimedia
QT += multimediawidgets
QT += core gui widgets quickwidgets positioning
QT += multimedia multimediawidgets
QT += webenginewidgets webchannel
QT += sql
QT += charts
QT += sql charts
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++17
# Include paths
INCLUDEPATH += include
# Build directories
OBJECTS_DIR = build
MOC_DIR = build
UI_DIR = build
RCC_DIR = build
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
DogDatabase.cpp \
InjuryAnalysisUI.cpp \
InjuryDatabase.cpp \
UAVDatabase.cpp \
injurydisiplayui.cpp \
main.cpp \
guidingui.cpp
src/DogDatabase.cpp \
src/InjuryAnalysisUI.cpp \
src/InjuryDatabase.cpp \
src/UAVDatabase.cpp \
src/injurydisiplayui.cpp \
src/main.cpp \
src/guidingui.cpp
HEADERS += \
DogDatabase.h \
InjuryAnalysisUI.h \
InjuryDatabase.h \
UAVDatabase.h \
guidingui.h \
injurydisiplayui.h
include/DogDatabase.h \
include/InjuryAnalysisUI.h \
include/InjuryDatabase.h \
include/UAVDatabase.h \
include/guidingui.h \
include/injurydisiplayui.h
FORMS += \
InjuryAnalysisUI.ui \
guidingui.ui \
injurydisiplayui.ui
ui/InjuryAnalysisUI.ui \
ui/guidingui.ui \
ui/injurydisiplayui.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin

@ -1,194 +0,0 @@
#include "DogDatabase.h"
DogDatabase *DogDatabase::getInstance()
{
static DogDatabase db;
return &db;
}
DogDatabase::~DogDatabase()
{
close();
}
DogDatabase::DogDatabase()
{
m_sqlDb = QSqlDatabase::addDatabase("QMYSQL");
}
//添加记录
bool DogDatabase::add(const Dog &data)
{
if(open("fly_land_database","root","hzk200407140238"))
{
beginAddFiled("dogdatabase");
addFiled("id");
addFiled("state");
addFiled("ip");
addFiled("port");
addFiled("lon");
addFiled("lat");
endAddFiled();
beginAddRow();
addValue(data.id);
addValue(data.state);
addValue(data.ip);
addValue(data.port);
addValue(data.lon);
addValue(data.lat);
endAddRow();
m_valueSql = m_valueSql.left(m_valueSql.length()-1);
QString sql;
sql = m_headerSql + m_valueSql;
return exec(sql);
}
close();
return false;
}
//查询位置信息的记录
Point DogDatabase::ReturnUAVPosition(QString id)
{
Point position;
position.lon = 0;
position.lat = 0;
if(open("fly_land_database","root","hzk200407140238"))
{
QSqlQuery query(m_sqlDb);
QString strQuery;
strQuery = "SELECT lon, lat FROM ";
strQuery += "dogdatabase";
strQuery += " WHERE id = ";
strQuery += id;
qDebug()<<strQuery;
query.prepare(strQuery);
bool isSuccess = query.exec();
if(isSuccess)
{
while(query.next())
{
double lon = query.value(0).toDouble();
double lat = query.value(1).toDouble();
position.lon = lon;
position.lat = lat;
}
}
return position;
}
close();
return position;
}
//返回状态信息
int DogDatabase::giveInfo(QString id)
{
int state = -1;
if(open("fly_land_database","root","hzk200407140238"))
{
QSqlQuery query(m_sqlDb);
QString strQuery;
strQuery = "SELECT state FROM ";
strQuery += "dogdatabase";
strQuery += " WHERE id = ";
strQuery += id;
qDebug()<<strQuery;
query.prepare(strQuery);
bool isSuccess = query.exec();
if(isSuccess)
{
while(query.next())
{
state = query.value(0).toInt();
}
}
return state;
}
close();
return state;
}
//——————————————————私有方法————————————————————
//建立连接
bool DogDatabase::open(const QString &dbName,const QString &userName,const QString &passwd)
{
m_sqlDb.setHostName("localhost"); // 本地数据库 远程DB是ipaddress
m_sqlDb.setPort(3306); // 设置端口号
m_sqlDb.setDatabaseName(dbName);
m_sqlDb.setUserName(userName);
m_sqlDb.setPassword(passwd);
if(!m_sqlDb.open())
{
qDebug()<<"连接失败!";
return false;
}
else
{
qDebug()<<"连接成功!";
return true;
}
}
void DogDatabase::close()
{
m_sqlDb.close();
}
void DogDatabase::beginAddFiled(const QString &tableName)
{
m_tableName = tableName;
m_fieldName.clear();
m_headerSql.clear();
m_valueSql.clear();
m_fieldAdd = 0;
}
void DogDatabase::addFiled(const QString &filedName)
{
m_fieldName.append(filedName);
}
void DogDatabase::endAddFiled()
{
m_headerSql = QString("INSERT INTO %0 (%1) values").arg(m_tableName).arg(m_fieldName.join(","));
}
void DogDatabase::beginAddRow()
{
m_valueSql += "(";
}
void DogDatabase::addValue(const QVariant &value)
{
m_valueSql += QString("\'%0\',").arg(value.toString());
m_fieldAdd++;
}
void DogDatabase::endAddRow()
{
m_valueSql = m_valueSql.left(m_valueSql.length() - 1);
m_valueSql += "),";
}
bool DogDatabase::exec(const QString &sql)
{
QSqlQuery query(m_sqlDb);
bool success = query.exec(sql);
return success;
}

@ -1,98 +0,0 @@
#ifndef DOGDATABASE_H
#define DOGDATABASE_H
#include <QtSql>
#include <QSqlDatabase>
#include <QWidget>
#include <QSqlQuery>
#include <QString>
#include <QSqlRecord>
#include <QDebug>
#include "UAVDatabase.h"
using namespace std;
struct Dog
{
QString id;
int state;
QString ip;
int port;
double lon;
double lat;
};
class DogDatabase
{
// Q_OBJECT宏用于提供Qt信号槽和元对象系统服务
// 它必须限定为私有访问权限
//Q_OBJECT
public:
static DogDatabase *getInstance();
DogDatabase();
~DogDatabase();
Dog data;
//返回状态信息
int giveInfo(QString id);
//添加数据记录
bool add(const Dog &data);
//查询位置信息数据
Point ReturnUAVPosition( QString id);
private:
//打开
bool open(const QString &dbName,const QString &userName = QString(),const QString &passwd = QString());
//关闭
void close();
//开始添加字段
void beginAddFiled(const QString &tableName);
//添加字段
void addFiled(const QString &filedName);
//结束添加字段
void endAddFiled();
//开始添加行
void beginAddRow();
//添加字段值
void addValue(const QVariant &value);
//结束添加行
void endAddRow();
//执行
bool exec(const QString &sql);
private:
//数据库
QSqlDatabase m_sqlDb;
//表名
QString m_tableName;
//字段名
QStringList m_fieldName;
//头sql
QString m_headerSql;
//值sql
QString m_valueSql;
//已添加row数
int m_fieldAdd = 0;
};
#endif // DOGDATABASE_H

Binary file not shown.

@ -1,44 +0,0 @@
#ifndef INJURYANALYSISUI_H
#define INJURYANALYSISUI_H
#include "InjuryDatabase.h"
#include <QWidget>
#include <QtCharts>
#include <QChartView>
#include <QBarSeries>
#include <QBarSet>
#include <QBarCategoryAxis>
#include <QValueAxis>
QT_BEGIN_NAMESPACE
namespace Ui {
class InjuryAnalysisUI; //声明ui命名空间下的类
}
QT_END_NAMESPACE
class InjuryAnalysisUI : public QWidget
{
// Q_OBJECT宏用于提供Qt信号槽和元对象系统服务
// 它必须限定为私有访问权限
Q_OBJECT
public:
InjuryAnalysisUI(QWidget *parent = nullptr);
~InjuryAnalysisUI();
QList<Injury> result;
private:
void createBarChart();
void updateBarChart();
private slots:
void on_searchButton_clicked();
private:
// 创建Ui::InjuryAnalysisUI类型的指针用于操作ui界面及其控件
Ui::InjuryAnalysisUI *ui;
QChart *chart;
QChartView *chartView;
};
#endif // INJURYANALYSISUI_H

Binary file not shown.

Binary file not shown.

@ -1,6 +1,6 @@
#############################################################################
# Makefile for building: CasualtySightPlus
# Generated by qmake (3.1) (Qt 5.15.13)
# Generated by qmake (3.1) (Qt 5.15.15)
# Project: CasualtySightPlus.pro
# Template: app
# Command: /usr/lib/qt5/bin/qmake -o Makefile CasualtySightPlus.pro
@ -14,10 +14,10 @@ EQ = =
CC = gcc
CXX = g++
DEFINES = -DQT_NO_DEBUG -DQT_QUICKWIDGETS_LIB -DQT_LOCATION_LIB -DQT_POSITIONINGQUICK_LIB -DQT_WEBENGINEWIDGETS_LIB -DQT_WEBENGINECORE_LIB -DQT_QUICK_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_CHARTS_LIB -DQT_WIDGETS_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_WEBCHANNEL_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_POSITIONING_LIB -DQT_SQL_LIB -DQT_CORE_LIB
DEFINES = -DQT_NO_DEBUG -DQT_QUICKWIDGETS_LIB -DQT_MULTIMEDIAWIDGETS_LIB -DQT_WEBENGINEWIDGETS_LIB -DQT_PRINTSUPPORT_LIB -DQT_CHARTS_LIB -DQT_WIDGETS_LIB -DQT_WEBENGINECORE_LIB -DQT_QUICK_LIB -DQT_MULTIMEDIA_LIB -DQT_GUI_LIB -DQT_QMLMODELS_LIB -DQT_WEBCHANNEL_LIB -DQT_QML_LIB -DQT_NETWORK_LIB -DQT_POSITIONING_LIB -DQT_SQL_LIB -DQT_CORE_LIB
CFLAGS = -pipe -O2 -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
CXXFLAGS = -pipe -O2 -std=gnu++1z -Wall -Wextra -D_REENTRANT -fPIC $(DEFINES)
INCPATH = -I. -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQuickWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtLocation -I/usr/include/x86_64-linux-gnu/qt5/QtPositioningQuick -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineCore -I/usr/include/x86_64-linux-gnu/qt5/QtQuick -I/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtCharts -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtQmlModels -I/usr/include/x86_64-linux-gnu/qt5/QtWebChannel -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtPositioning -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I. -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++
INCPATH = -I. -Iinclude -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQuickWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtCharts -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineCore -I/usr/include/x86_64-linux-gnu/qt5/QtQuick -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtQmlModels -I/usr/include/x86_64-linux-gnu/qt5/QtWebChannel -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtPositioning -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtCore -Ibuild -Ibuild -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++
QMAKE = /usr/lib/qt5/bin/qmake
DEL_FILE = rm -f
CHK_DIR_EXISTS= test -d
@ -37,10 +37,10 @@ MOVE = mv -f
TAR = tar -cf
COMPRESS = gzip -9f
DISTNAME = CasualtySightPlus1.0.0
DISTDIR = /home/hzk/Enjoy/src/Client/.tmp/CasualtySightPlus1.0.0
DISTDIR = /home/hzk/Software_Architecture/src/Client/build/CasualtySightPlus1.0.0
LINK = g++
LFLAGS = -Wl,-O1 -Wl,-rpath-link,/usr/lib/x86_64-linux-gnu
LIBS = $(SUBLIBS) /usr/lib/x86_64-linux-gnu/libQt5QuickWidgets.so /usr/lib/x86_64-linux-gnu/libQt5Location.so /usr/lib/x86_64-linux-gnu/libQt5PositioningQuick.so /usr/lib/x86_64-linux-gnu/libQt5WebEngineWidgets.so /usr/lib/x86_64-linux-gnu/libQt5WebEngineCore.so /usr/lib/x86_64-linux-gnu/libQt5Quick.so /usr/lib/x86_64-linux-gnu/libQt5MultimediaWidgets.so /usr/lib/x86_64-linux-gnu/libQt5PrintSupport.so /usr/lib/x86_64-linux-gnu/libQt5Charts.so /usr/lib/x86_64-linux-gnu/libQt5Widgets.so /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so /usr/lib/x86_64-linux-gnu/libQt5Gui.so /usr/lib/x86_64-linux-gnu/libQt5QmlModels.so /usr/lib/x86_64-linux-gnu/libQt5WebChannel.so /usr/lib/x86_64-linux-gnu/libQt5Qml.so /usr/lib/x86_64-linux-gnu/libQt5Network.so /usr/lib/x86_64-linux-gnu/libQt5Positioning.so /usr/lib/x86_64-linux-gnu/libQt5Sql.so /usr/lib/x86_64-linux-gnu/libQt5Core.so -lGL -lpthread
LIBS = $(SUBLIBS) /usr/lib/x86_64-linux-gnu/libQt5QuickWidgets.so /usr/lib/x86_64-linux-gnu/libQt5MultimediaWidgets.so /usr/lib/x86_64-linux-gnu/libQt5WebEngineWidgets.so /usr/lib/x86_64-linux-gnu/libQt5PrintSupport.so /usr/lib/x86_64-linux-gnu/libQt5Charts.so /usr/lib/x86_64-linux-gnu/libQt5Widgets.so /usr/lib/x86_64-linux-gnu/libQt5WebEngineCore.so /usr/lib/x86_64-linux-gnu/libQt5Quick.so /usr/lib/x86_64-linux-gnu/libQt5Multimedia.so /usr/lib/x86_64-linux-gnu/libQt5Gui.so /usr/lib/x86_64-linux-gnu/libQt5QmlModels.so /usr/lib/x86_64-linux-gnu/libQt5WebChannel.so /usr/lib/x86_64-linux-gnu/libQt5Qml.so /usr/lib/x86_64-linux-gnu/libQt5Network.so /usr/lib/x86_64-linux-gnu/libQt5Positioning.so /usr/lib/x86_64-linux-gnu/libQt5Sql.so /usr/lib/x86_64-linux-gnu/libQt5Core.so -lGL -lpthread
AR = ar cqs
RANLIB =
SED = sed
@ -48,31 +48,31 @@ STRIP = strip
####### Output directory
OBJECTS_DIR = ./
OBJECTS_DIR = build/
####### Files
SOURCES = DogDatabase.cpp \
InjuryAnalysisUI.cpp \
InjuryDatabase.cpp \
UAVDatabase.cpp \
injurydisiplayui.cpp \
main.cpp \
guidingui.cpp qrc_res.cpp \
moc_InjuryAnalysisUI.cpp \
moc_guidingui.cpp \
moc_injurydisiplayui.cpp
OBJECTS = DogDatabase.o \
InjuryAnalysisUI.o \
InjuryDatabase.o \
UAVDatabase.o \
injurydisiplayui.o \
main.o \
guidingui.o \
qrc_res.o \
moc_InjuryAnalysisUI.o \
moc_guidingui.o \
moc_injurydisiplayui.o
SOURCES = src/DogDatabase.cpp \
src/InjuryAnalysisUI.cpp \
src/InjuryDatabase.cpp \
src/UAVDatabase.cpp \
src/injurydisiplayui.cpp \
src/main.cpp \
src/guidingui.cpp build/qrc_res.cpp \
build/moc_InjuryAnalysisUI.cpp \
build/moc_guidingui.cpp \
build/moc_injurydisiplayui.cpp
OBJECTS = build/DogDatabase.o \
build/InjuryAnalysisUI.o \
build/InjuryDatabase.o \
build/UAVDatabase.o \
build/injurydisiplayui.o \
build/main.o \
build/guidingui.o \
build/qrc_res.o \
build/moc_InjuryAnalysisUI.o \
build/moc_guidingui.o \
build/moc_injurydisiplayui.o
DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/unix.conf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/common/linux.conf \
@ -105,7 +105,6 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_location.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
@ -166,18 +165,18 @@ DIST = /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/exceptions.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/yacc.prf \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/lex.prf \
CasualtySightPlus.pro DogDatabase.h \
InjuryAnalysisUI.h \
InjuryDatabase.h \
UAVDatabase.h \
guidingui.h \
injurydisiplayui.h DogDatabase.cpp \
InjuryAnalysisUI.cpp \
InjuryDatabase.cpp \
UAVDatabase.cpp \
injurydisiplayui.cpp \
main.cpp \
guidingui.cpp
CasualtySightPlus.pro include/DogDatabase.h \
include/InjuryAnalysisUI.h \
include/InjuryDatabase.h \
include/UAVDatabase.h \
include/guidingui.h \
include/injurydisiplayui.h src/DogDatabase.cpp \
src/InjuryAnalysisUI.cpp \
src/InjuryDatabase.cpp \
src/UAVDatabase.cpp \
src/injurydisiplayui.cpp \
src/main.cpp \
src/guidingui.cpp
QMAKE_TARGET = CasualtySightPlus
DESTDIR =
TARGET = CasualtySightPlus
@ -186,7 +185,7 @@ TARGET = CasualtySightPlus
first: all
####### Build rules
CasualtySightPlus: ui_InjuryAnalysisUI.h ui_guidingui.h ui_injurydisiplayui.h $(OBJECTS)
CasualtySightPlus: build/ui_InjuryAnalysisUI.h build/ui_guidingui.h build/ui_injurydisiplayui.h $(OBJECTS)
$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
Makefile: CasualtySightPlus.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
@ -221,7 +220,6 @@ Makefile: CasualtySightPlus.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_location.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
@ -317,7 +315,6 @@ Makefile: CasualtySightPlus.pro /usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++/
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_location.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri:
/usr/lib/x86_64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri:
@ -396,9 +393,9 @@ distdir: FORCE
$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
$(COPY_FILE) --parents res.qrc $(DISTDIR)/
$(COPY_FILE) --parents /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/
$(COPY_FILE) --parents DogDatabase.h InjuryAnalysisUI.h InjuryDatabase.h UAVDatabase.h guidingui.h injurydisiplayui.h $(DISTDIR)/
$(COPY_FILE) --parents DogDatabase.cpp InjuryAnalysisUI.cpp InjuryDatabase.cpp UAVDatabase.cpp injurydisiplayui.cpp main.cpp guidingui.cpp $(DISTDIR)/
$(COPY_FILE) --parents InjuryAnalysisUI.ui guidingui.ui injurydisiplayui.ui $(DISTDIR)/
$(COPY_FILE) --parents include/DogDatabase.h include/InjuryAnalysisUI.h include/InjuryDatabase.h include/UAVDatabase.h include/guidingui.h include/injurydisiplayui.h $(DISTDIR)/
$(COPY_FILE) --parents src/DogDatabase.cpp src/InjuryAnalysisUI.cpp src/InjuryDatabase.cpp src/UAVDatabase.cpp src/injurydisiplayui.cpp src/main.cpp src/guidingui.cpp $(DISTDIR)/
$(COPY_FILE) --parents ui/InjuryAnalysisUI.ui ui/guidingui.ui ui/injurydisiplayui.ui $(DISTDIR)/
clean: compiler_clean
@ -422,10 +419,10 @@ check: first
benchmark: first
compiler_rcc_make_all: qrc_res.cpp
compiler_rcc_make_all: build/qrc_res.cpp
compiler_rcc_clean:
-$(DEL_FILE) qrc_res.cpp
qrc_res.cpp: res.qrc \
-$(DEL_FILE) build/qrc_res.cpp
build/qrc_res.cpp: res.qrc \
/usr/lib/qt5/bin/rcc \
res/qml/MAP2.qml \
res/qml/MAP.qml \
@ -454,51 +451,51 @@ qrc_res.cpp: res.qrc \
res/image/soldier.png \
res/image/MapBackGround.png \
res/image/logo.png
/usr/lib/qt5/bin/rcc -name res res.qrc -o qrc_res.cpp
/usr/lib/qt5/bin/rcc -name res res.qrc -o build/qrc_res.cpp
compiler_moc_predefs_make_all: moc_predefs.h
compiler_moc_predefs_make_all: build/moc_predefs.h
compiler_moc_predefs_clean:
-$(DEL_FILE) moc_predefs.h
moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
g++ -pipe -O2 -std=gnu++1z -Wall -Wextra -dM -E -o moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
-$(DEL_FILE) build/moc_predefs.h
build/moc_predefs.h: /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
g++ -pipe -O2 -std=gnu++1z -Wall -Wextra -dM -E -o build/moc_predefs.h /usr/lib/x86_64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
compiler_moc_header_make_all: moc_InjuryAnalysisUI.cpp moc_guidingui.cpp moc_injurydisiplayui.cpp
compiler_moc_header_make_all: build/moc_InjuryAnalysisUI.cpp build/moc_guidingui.cpp build/moc_injurydisiplayui.cpp
compiler_moc_header_clean:
-$(DEL_FILE) moc_InjuryAnalysisUI.cpp moc_guidingui.cpp moc_injurydisiplayui.cpp
moc_InjuryAnalysisUI.cpp: InjuryAnalysisUI.h \
InjuryDatabase.h \
moc_predefs.h \
-$(DEL_FILE) build/moc_InjuryAnalysisUI.cpp build/moc_guidingui.cpp build/moc_injurydisiplayui.cpp
build/moc_InjuryAnalysisUI.cpp: include/InjuryAnalysisUI.h \
include/InjuryDatabase.h \
build/moc_predefs.h \
/usr/lib/qt5/bin/moc
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/hzk/Enjoy/src/Client/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/hzk/Enjoy/src/Client -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQuickWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtLocation -I/usr/include/x86_64-linux-gnu/qt5/QtPositioningQuick -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineCore -I/usr/include/x86_64-linux-gnu/qt5/QtQuick -I/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtCharts -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtQmlModels -I/usr/include/x86_64-linux-gnu/qt5/QtWebChannel -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtPositioning -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/13 -I/usr/include/x86_64-linux-gnu/c++/13 -I/usr/include/c++/13/backward -I/usr/lib/gcc/x86_64-linux-gnu/13/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include InjuryAnalysisUI.h -o moc_InjuryAnalysisUI.cpp
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/hzk/Software_Architecture/src/Client/build/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/hzk/Software_Architecture/src/Client -I/home/hzk/Software_Architecture/src/Client/include -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQuickWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtCharts -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineCore -I/usr/include/x86_64-linux-gnu/qt5/QtQuick -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtQmlModels -I/usr/include/x86_64-linux-gnu/qt5/QtWebChannel -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtPositioning -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/13 -I/usr/include/x86_64-linux-gnu/c++/13 -I/usr/include/c++/13/backward -I/usr/lib/gcc/x86_64-linux-gnu/13/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include include/InjuryAnalysisUI.h -o build/moc_InjuryAnalysisUI.cpp
moc_guidingui.cpp: guidingui.h \
moc_predefs.h \
build/moc_guidingui.cpp: include/guidingui.h \
build/moc_predefs.h \
/usr/lib/qt5/bin/moc
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/hzk/Enjoy/src/Client/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/hzk/Enjoy/src/Client -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQuickWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtLocation -I/usr/include/x86_64-linux-gnu/qt5/QtPositioningQuick -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineCore -I/usr/include/x86_64-linux-gnu/qt5/QtQuick -I/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtCharts -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtQmlModels -I/usr/include/x86_64-linux-gnu/qt5/QtWebChannel -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtPositioning -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/13 -I/usr/include/x86_64-linux-gnu/c++/13 -I/usr/include/c++/13/backward -I/usr/lib/gcc/x86_64-linux-gnu/13/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include guidingui.h -o moc_guidingui.cpp
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/hzk/Software_Architecture/src/Client/build/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/hzk/Software_Architecture/src/Client -I/home/hzk/Software_Architecture/src/Client/include -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQuickWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtCharts -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineCore -I/usr/include/x86_64-linux-gnu/qt5/QtQuick -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtQmlModels -I/usr/include/x86_64-linux-gnu/qt5/QtWebChannel -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtPositioning -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/13 -I/usr/include/x86_64-linux-gnu/c++/13 -I/usr/include/c++/13/backward -I/usr/lib/gcc/x86_64-linux-gnu/13/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include include/guidingui.h -o build/moc_guidingui.cpp
moc_injurydisiplayui.cpp: injurydisiplayui.h \
moc_predefs.h \
build/moc_injurydisiplayui.cpp: include/injurydisiplayui.h \
build/moc_predefs.h \
/usr/lib/qt5/bin/moc
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/hzk/Enjoy/src/Client/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/hzk/Enjoy/src/Client -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQuickWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtLocation -I/usr/include/x86_64-linux-gnu/qt5/QtPositioningQuick -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineCore -I/usr/include/x86_64-linux-gnu/qt5/QtQuick -I/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtCharts -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtQmlModels -I/usr/include/x86_64-linux-gnu/qt5/QtWebChannel -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtPositioning -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/13 -I/usr/include/x86_64-linux-gnu/c++/13 -I/usr/include/c++/13/backward -I/usr/lib/gcc/x86_64-linux-gnu/13/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include injurydisiplayui.h -o moc_injurydisiplayui.cpp
/usr/lib/qt5/bin/moc $(DEFINES) --include /home/hzk/Software_Architecture/src/Client/build/moc_predefs.h -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/hzk/Software_Architecture/src/Client -I/home/hzk/Software_Architecture/src/Client/include -I/usr/include/x86_64-linux-gnu/qt5 -I/usr/include/x86_64-linux-gnu/qt5/QtQuickWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtMultimediaWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtPrintSupport -I/usr/include/x86_64-linux-gnu/qt5/QtCharts -I/usr/include/x86_64-linux-gnu/qt5/QtWidgets -I/usr/include/x86_64-linux-gnu/qt5/QtWebEngineCore -I/usr/include/x86_64-linux-gnu/qt5/QtQuick -I/usr/include/x86_64-linux-gnu/qt5/QtMultimedia -I/usr/include/x86_64-linux-gnu/qt5/QtGui -I/usr/include/x86_64-linux-gnu/qt5/QtQmlModels -I/usr/include/x86_64-linux-gnu/qt5/QtWebChannel -I/usr/include/x86_64-linux-gnu/qt5/QtQml -I/usr/include/x86_64-linux-gnu/qt5/QtNetwork -I/usr/include/x86_64-linux-gnu/qt5/QtPositioning -I/usr/include/x86_64-linux-gnu/qt5/QtSql -I/usr/include/x86_64-linux-gnu/qt5/QtCore -I/usr/include/c++/13 -I/usr/include/x86_64-linux-gnu/c++/13 -I/usr/include/c++/13/backward -I/usr/lib/gcc/x86_64-linux-gnu/13/include -I/usr/local/include -I/usr/include/x86_64-linux-gnu -I/usr/include include/injurydisiplayui.h -o build/moc_injurydisiplayui.cpp
compiler_moc_objc_header_make_all:
compiler_moc_objc_header_clean:
compiler_moc_source_make_all:
compiler_moc_source_clean:
compiler_uic_make_all: ui_InjuryAnalysisUI.h ui_guidingui.h ui_injurydisiplayui.h
compiler_uic_make_all: build/ui_InjuryAnalysisUI.h build/ui_guidingui.h build/ui_injurydisiplayui.h
compiler_uic_clean:
-$(DEL_FILE) ui_InjuryAnalysisUI.h ui_guidingui.h ui_injurydisiplayui.h
ui_InjuryAnalysisUI.h: InjuryAnalysisUI.ui \
-$(DEL_FILE) build/ui_InjuryAnalysisUI.h build/ui_guidingui.h build/ui_injurydisiplayui.h
build/ui_InjuryAnalysisUI.h: ui/InjuryAnalysisUI.ui \
/usr/lib/qt5/bin/uic
/usr/lib/qt5/bin/uic InjuryAnalysisUI.ui -o ui_InjuryAnalysisUI.h
/usr/lib/qt5/bin/uic ui/InjuryAnalysisUI.ui -o build/ui_InjuryAnalysisUI.h
ui_guidingui.h: guidingui.ui \
build/ui_guidingui.h: ui/guidingui.ui \
/usr/lib/qt5/bin/uic
/usr/lib/qt5/bin/uic guidingui.ui -o ui_guidingui.h
/usr/lib/qt5/bin/uic ui/guidingui.ui -o build/ui_guidingui.h
ui_injurydisiplayui.h: injurydisiplayui.ui \
build/ui_injurydisiplayui.h: ui/injurydisiplayui.ui \
/usr/lib/qt5/bin/uic
/usr/lib/qt5/bin/uic injurydisiplayui.ui -o ui_injurydisiplayui.h
/usr/lib/qt5/bin/uic ui/injurydisiplayui.ui -o build/ui_injurydisiplayui.h
compiler_yacc_decl_make_all:
compiler_yacc_decl_clean:
@ -510,47 +507,47 @@ compiler_clean: compiler_rcc_clean compiler_moc_predefs_clean compiler_moc_heade
####### Compile
DogDatabase.o: DogDatabase.cpp DogDatabase.h \
UAVDatabase.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o DogDatabase.o DogDatabase.cpp
build/DogDatabase.o: src/DogDatabase.cpp include/DogDatabase.h \
include/UAVDatabase.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/DogDatabase.o src/DogDatabase.cpp
InjuryAnalysisUI.o: InjuryAnalysisUI.cpp InjuryAnalysisUI.h \
InjuryDatabase.h \
ui_InjuryAnalysisUI.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o InjuryAnalysisUI.o InjuryAnalysisUI.cpp
build/InjuryAnalysisUI.o: src/InjuryAnalysisUI.cpp include/InjuryAnalysisUI.h \
include/InjuryDatabase.h \
build/ui_InjuryAnalysisUI.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/InjuryAnalysisUI.o src/InjuryAnalysisUI.cpp
InjuryDatabase.o: InjuryDatabase.cpp InjuryDatabase.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o InjuryDatabase.o InjuryDatabase.cpp
build/InjuryDatabase.o: src/InjuryDatabase.cpp include/InjuryDatabase.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/InjuryDatabase.o src/InjuryDatabase.cpp
UAVDatabase.o: UAVDatabase.cpp UAVDatabase.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o UAVDatabase.o UAVDatabase.cpp
build/UAVDatabase.o: src/UAVDatabase.cpp include/UAVDatabase.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/UAVDatabase.o src/UAVDatabase.cpp
injurydisiplayui.o: injurydisiplayui.cpp injurydisiplayui.h \
ui_injurydisiplayui.h \
InjuryDatabase.h \
guidingui.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o injurydisiplayui.o injurydisiplayui.cpp
build/injurydisiplayui.o: src/injurydisiplayui.cpp include/injurydisiplayui.h \
build/ui_injurydisiplayui.h \
include/InjuryDatabase.h \
include/guidingui.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/injurydisiplayui.o src/injurydisiplayui.cpp
main.o: main.cpp guidingui.h \
DogDatabase.h \
UAVDatabase.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o main.cpp
build/main.o: src/main.cpp include/guidingui.h \
include/DogDatabase.h \
include/UAVDatabase.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/main.o src/main.cpp
guidingui.o: guidingui.cpp guidingui.h \
ui_guidingui.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o guidingui.o guidingui.cpp
build/guidingui.o: src/guidingui.cpp include/guidingui.h \
build/ui_guidingui.h
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/guidingui.o src/guidingui.cpp
qrc_res.o: qrc_res.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o qrc_res.o qrc_res.cpp
build/qrc_res.o: build/qrc_res.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/qrc_res.o build/qrc_res.cpp
moc_InjuryAnalysisUI.o: moc_InjuryAnalysisUI.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_InjuryAnalysisUI.o moc_InjuryAnalysisUI.cpp
build/moc_InjuryAnalysisUI.o: build/moc_InjuryAnalysisUI.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/moc_InjuryAnalysisUI.o build/moc_InjuryAnalysisUI.cpp
moc_guidingui.o: moc_guidingui.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_guidingui.o moc_guidingui.cpp
build/moc_guidingui.o: build/moc_guidingui.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/moc_guidingui.o build/moc_guidingui.cpp
moc_injurydisiplayui.o: moc_injurydisiplayui.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_injurydisiplayui.o moc_injurydisiplayui.cpp
build/moc_injurydisiplayui.o: build/moc_injurydisiplayui.cpp
$(CXX) -c $(CXXFLAGS) $(INCPATH) -o build/moc_injurydisiplayui.o build/moc_injurydisiplayui.cpp
####### Install

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,120 @@
/****************************************************************************
** Meta object code from reading C++ file 'InjuryAnalysisUI.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.15)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include <memory>
#include "../include/InjuryAnalysisUI.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'InjuryAnalysisUI.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.15.15. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_InjuryAnalysisUI_t {
QByteArrayData data[3];
char stringdata0[40];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_InjuryAnalysisUI_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_InjuryAnalysisUI_t qt_meta_stringdata_InjuryAnalysisUI = {
{
QT_MOC_LITERAL(0, 0, 16), // "InjuryAnalysisUI"
QT_MOC_LITERAL(1, 17, 21), // "onSearchButtonClicked"
QT_MOC_LITERAL(2, 39, 0) // ""
},
"InjuryAnalysisUI\0onSearchButtonClicked\0"
""
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_InjuryAnalysisUI[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
1, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
// slots: name, argc, parameters, tag, flags
1, 0, 19, 2, 0x08 /* Private */,
// slots: parameters
QMetaType::Void,
0 // eod
};
void InjuryAnalysisUI::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<InjuryAnalysisUI *>(_o);
(void)_t;
switch (_id) {
case 0: _t->onSearchButtonClicked(); break;
default: ;
}
}
(void)_a;
}
QT_INIT_METAOBJECT const QMetaObject InjuryAnalysisUI::staticMetaObject = { {
QMetaObject::SuperData::link<QWidget::staticMetaObject>(),
qt_meta_stringdata_InjuryAnalysisUI.data,
qt_meta_data_InjuryAnalysisUI,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *InjuryAnalysisUI::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *InjuryAnalysisUI::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_InjuryAnalysisUI.stringdata0))
return static_cast<void*>(this);
return QWidget::qt_metacast(_clname);
}
int InjuryAnalysisUI::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QWidget::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 1)
qt_static_metacall(this, _c, _id, _a);
_id -= 1;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 1)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 1;
}
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE

@ -0,0 +1,160 @@
/****************************************************************************
** Meta object code from reading C++ file 'guidingui.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.15)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include <memory>
#include "../include/guidingui.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'guidingui.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.15.15. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_GuidingUI_t {
QByteArrayData data[12];
char stringdata0[212];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_GuidingUI_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_GuidingUI_t qt_meta_stringdata_GuidingUI = {
{
QT_MOC_LITERAL(0, 0, 9), // "GuidingUI"
QT_MOC_LITERAL(1, 10, 17), // "onAddRobotClicked"
QT_MOC_LITERAL(2, 28, 0), // ""
QT_MOC_LITERAL(3, 29, 17), // "onRobotTabClicked"
QT_MOC_LITERAL(4, 47, 26), // "onSpecifiedRobotTabClicked"
QT_MOC_LITERAL(5, 74, 15), // "onAddUAVClicked"
QT_MOC_LITERAL(6, 90, 15), // "onUAVTabClicked"
QT_MOC_LITERAL(7, 106, 22), // "onRobotLocationClicked"
QT_MOC_LITERAL(8, 129, 16), // "onUAVViewClicked"
QT_MOC_LITERAL(9, 146, 18), // "onRobotViewClicked"
QT_MOC_LITERAL(10, 165, 21), // "onRobotMappingClicked"
QT_MOC_LITERAL(11, 187, 24) // "onSmartNavigationClicked"
},
"GuidingUI\0onAddRobotClicked\0\0"
"onRobotTabClicked\0onSpecifiedRobotTabClicked\0"
"onAddUAVClicked\0onUAVTabClicked\0"
"onRobotLocationClicked\0onUAVViewClicked\0"
"onRobotViewClicked\0onRobotMappingClicked\0"
"onSmartNavigationClicked"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_GuidingUI[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
10, 14, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
// slots: name, argc, parameters, tag, flags
1, 0, 64, 2, 0x0a /* Public */,
3, 0, 65, 2, 0x0a /* Public */,
4, 0, 66, 2, 0x0a /* Public */,
5, 0, 67, 2, 0x08 /* Private */,
6, 0, 68, 2, 0x08 /* Private */,
7, 0, 69, 2, 0x08 /* Private */,
8, 0, 70, 2, 0x08 /* Private */,
9, 0, 71, 2, 0x08 /* Private */,
10, 0, 72, 2, 0x08 /* Private */,
11, 0, 73, 2, 0x08 /* Private */,
// slots: parameters
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
QMetaType::Void,
0 // eod
};
void GuidingUI::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
if (_c == QMetaObject::InvokeMetaMethod) {
auto *_t = static_cast<GuidingUI *>(_o);
(void)_t;
switch (_id) {
case 0: _t->onAddRobotClicked(); break;
case 1: _t->onRobotTabClicked(); break;
case 2: _t->onSpecifiedRobotTabClicked(); break;
case 3: _t->onAddUAVClicked(); break;
case 4: _t->onUAVTabClicked(); break;
case 5: _t->onRobotLocationClicked(); break;
case 6: _t->onUAVViewClicked(); break;
case 7: _t->onRobotViewClicked(); break;
case 8: _t->onRobotMappingClicked(); break;
case 9: _t->onSmartNavigationClicked(); break;
default: ;
}
}
(void)_a;
}
QT_INIT_METAOBJECT const QMetaObject GuidingUI::staticMetaObject = { {
QMetaObject::SuperData::link<QMainWindow::staticMetaObject>(),
qt_meta_stringdata_GuidingUI.data,
qt_meta_data_GuidingUI,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *GuidingUI::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *GuidingUI::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_GuidingUI.stringdata0))
return static_cast<void*>(this);
return QMainWindow::qt_metacast(_clname);
}
int GuidingUI::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QMainWindow::qt_metacall(_c, _id, _a);
if (_id < 0)
return _id;
if (_c == QMetaObject::InvokeMetaMethod) {
if (_id < 10)
qt_static_metacall(this, _c, _id, _a);
_id -= 10;
} else if (_c == QMetaObject::RegisterMethodArgumentMetaType) {
if (_id < 10)
*reinterpret_cast<int*>(_a[0]) = -1;
_id -= 10;
}
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE

Binary file not shown.

@ -0,0 +1,95 @@
/****************************************************************************
** Meta object code from reading C++ file 'injurydisiplayui.h'
**
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.15)
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
#include <memory>
#include "../include/injurydisiplayui.h"
#include <QtCore/qbytearray.h>
#include <QtCore/qmetatype.h>
#if !defined(Q_MOC_OUTPUT_REVISION)
#error "The header file 'injurydisiplayui.h' doesn't include <QObject>."
#elif Q_MOC_OUTPUT_REVISION != 67
#error "This file was generated using the moc from 5.15.15. It"
#error "cannot be used with the include files from this version of Qt."
#error "(The moc has changed too much.)"
#endif
QT_BEGIN_MOC_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
struct qt_meta_stringdata_InjuryDisiplayUI_t {
QByteArrayData data[1];
char stringdata0[17];
};
#define QT_MOC_LITERAL(idx, ofs, len) \
Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
qptrdiff(offsetof(qt_meta_stringdata_InjuryDisiplayUI_t, stringdata0) + ofs \
- idx * sizeof(QByteArrayData)) \
)
static const qt_meta_stringdata_InjuryDisiplayUI_t qt_meta_stringdata_InjuryDisiplayUI = {
{
QT_MOC_LITERAL(0, 0, 16) // "InjuryDisiplayUI"
},
"InjuryDisiplayUI"
};
#undef QT_MOC_LITERAL
static const uint qt_meta_data_InjuryDisiplayUI[] = {
// content:
8, // revision
0, // classname
0, 0, // classinfo
0, 0, // methods
0, 0, // properties
0, 0, // enums/sets
0, 0, // constructors
0, // flags
0, // signalCount
0 // eod
};
void InjuryDisiplayUI::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
{
(void)_o;
(void)_id;
(void)_c;
(void)_a;
}
QT_INIT_METAOBJECT const QMetaObject InjuryDisiplayUI::staticMetaObject = { {
QMetaObject::SuperData::link<QDialog::staticMetaObject>(),
qt_meta_stringdata_InjuryDisiplayUI.data,
qt_meta_data_InjuryDisiplayUI,
qt_static_metacall,
nullptr,
nullptr
} };
const QMetaObject *InjuryDisiplayUI::metaObject() const
{
return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
}
void *InjuryDisiplayUI::qt_metacast(const char *_clname)
{
if (!_clname) return nullptr;
if (!strcmp(_clname, qt_meta_stringdata_InjuryDisiplayUI.stringdata0))
return static_cast<void*>(this);
return QDialog::qt_metacast(_clname);
}
int InjuryDisiplayUI::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
{
_id = QDialog::qt_metacall(_c, _id, _a);
return _id;
}
QT_WARNING_POP
QT_END_MOC_NAMESPACE

@ -126,7 +126,7 @@
#define __FLT64_MANT_DIG__ 53
#define __FLT64X_MANT_DIG__ 64
#define __BFLT16_DIG__ 2
#define __GNUC__ 13
#define __GNUC__ 14
#define __GXX_RTTI 1
#define __pie__ 2
#define __MMX__ 1
@ -170,7 +170,7 @@
#define __PTRDIFF_MAX__ 0x7fffffffffffffffL
#define __amd64 1
#define __ATOMIC_HLE_ACQUIRE 65536
#define __GNUG__ 13
#define __GNUG__ 14
#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
#define __SIZEOF_SIZE_T__ 8
#define __BFLT16_HAS_INFINITY__ 1
@ -181,7 +181,7 @@
#define __cpp_initializer_lists 200806L
#define __FLT32_MAX_EXP__ 128
#define __cpp_hex_float 201603L
#define __GXX_ABI_VERSION 1018
#define __GXX_ABI_VERSION 1019
#define __FLT_MIN_EXP__ (-125)
#define __GCC_HAVE_DWARF2_CFI_ASM 1
#define __x86_64 1
@ -213,7 +213,7 @@
#define __DEC_EVAL_METHOD__ 2
#define __FLT_MANT_DIG__ 24
#define __LDBL_DECIMAL_DIG__ 21
#define __VERSION__ "13.3.0"
#define __VERSION__ "14.2.0"
#define __UINT64_C(c) c ## UL
#define __cpp_unicode_characters 201411L
#define _STDC_PREDEF_H 1
@ -279,7 +279,6 @@
#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16
#define __FLT_HAS_QUIET_NAN__ 1
#define __FLT_MAX_10_EXP__ 38
#define __LONG_MAX__ 0x7fffffffffffffffL
#define __FLT64X_HAS_DENORM__ 1
#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
#define __FLT_HAS_INFINITY__ 1
@ -429,7 +428,7 @@
#define __GLIBCXX_BITSIZE_INT_N_0 128
#define __FLT32X_HAS_QUIET_NAN__ 1
#define __ATOMIC_CONSUME 1
#define __GNUC_MINOR__ 3
#define __GNUC_MINOR__ 2
#define __GLIBCXX_TYPE_INT_N_0 __int128
#define __UINTMAX_MAX__ 0xffffffffffffffffUL
#define __PIE__ 2
@ -440,6 +439,7 @@
#define __INT16_C(c) c
#define __STDC__ 1
#define __PTRDIFF_TYPE__ long int
#define __LONG_MAX__ 0x7fffffffffffffffL
#define __FLT32X_MIN_10_EXP__ (-307)
#define __UINTPTR_TYPE__ long unsigned int
#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD

File diff suppressed because it is too large Load Diff

@ -1,7 +1,7 @@
/********************************************************************************
** Form generated from reading UI file 'InjuryAnalysisUI.ui'
**
** Created by: Qt User Interface Compiler version 5.15.13
** Created by: Qt User Interface Compiler version 5.15.15
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

@ -1,7 +1,7 @@
/********************************************************************************
** Form generated from reading UI file 'guidingui.ui'
**
** Created by: Qt User Interface Compiler version 5.15.13
** Created by: Qt User Interface Compiler version 5.15.15
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/
@ -102,7 +102,7 @@ public:
if (GuidingUI->objectName().isEmpty())
GuidingUI->setObjectName(QString::fromUtf8("GuidingUI"));
GuidingUI->setEnabled(true);
GuidingUI->resize(1000, 663);
GuidingUI->resize(1400, 900);
GuidingUI->setToolTipDuration(0);
GuidingUI->setStyleSheet(QString::fromUtf8("#centralwidget{\n"
" background-color: rgb(24, 33, 45);\n"
@ -166,13 +166,14 @@ public:
label_2->setObjectName(QString::fromUtf8("label_2"));
label_2->setStyleSheet(QString::fromUtf8("QLabel {\n"
" background-color: rgba(15, 28, 34, 0);\n"
" color: rgb(82, 194, 242); /* \350\256\276\347\275\256\345\255\227\344\275\223\351\242\234\350\211\262\344\270\272\344\272\256\350\223\235\350\211\262 */\n"
" color: rgb(82, 194, 242);\n"
" border: none;\n"
" padding: 10px 20px; /* \350\256\276\347\275\256\345\206\205\350\276\271\350\267\235 */\n"
" border-radius: 5px; /* \350\256\276\347\275\256\346\214\211\351\222\256\345\234\206\350\247\222 */\n"
" font-size: 28px; /* \350\256\276\347\275\256\346\226\207\345\255\227\345\244\247\345\260\217 */\n"
" font-weight: bold; /*\350\256\276\347\275\256\345\255\227\344\275\223\345\212\240\347\262\227*/\n"
" text-align: left; /* \350\256\276\347\275\256\345\255\227\344\275\223\345\261\205\345\267\246\345\257\271\351\275\220 */\n"
" padding: 10px 20px;\n"
" border-radius: 5px;\n"
" font-size: 32px;\n"
" font-weight: bold;\n"
" font-family: \"Courier New\", \"Monaco\", monospace;\n"
" text-align: left;\n"
"}\n"
""));
@ -193,8 +194,8 @@ public:
horizontalLayout_main->setObjectName(QString::fromUtf8("horizontalLayout_main"));
leftPanel = new QWidget(centralwidget);
leftPanel->setObjectName(QString::fromUtf8("leftPanel"));
leftPanel->setMinimumSize(QSize(210, 0));
leftPanel->setMaximumSize(QSize(210, 16777215));
leftPanel->setMinimumSize(QSize(250, 0));
leftPanel->setMaximumSize(QSize(250, 16777215));
leftPanel->setStyleSheet(QString::fromUtf8("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgb(15, 22, 32), stop:1 rgb(25, 35, 45));"));
verticalLayout = new QVBoxLayout(leftPanel);
verticalLayout->setSpacing(20);
@ -202,21 +203,30 @@ public:
verticalLayout->setContentsMargins(10, 15, 10, 10);
leftPanelTitle = new QLabel(leftPanel);
leftPanelTitle->setObjectName(QString::fromUtf8("leftPanelTitle"));
leftPanelTitle->setStyleSheet(QString::fromUtf8("color: rgb(82, 194, 242);\n"
leftPanelTitle->setStyleSheet(QString::fromUtf8("color: rgb(255, 255, 255);\n"
"font-size: 18px;\n"
"font-weight: bold;\n"
"padding: 5px;\n"
"margin-bottom: 10px;"));
"padding: 12px;\n"
"margin-bottom: 10px;\n"
"background: qlineargradient(x1:0, y1:0, x2:1, y2:1, \n"
" stop:0 rgba(82, 194, 242, 0.3), \n"
" stop:1 rgba(45, 120, 180, 0.3));\n"
"border: 2px solid rgba(82, 194, 242, 0.7);\n"
"border-radius: 8px;"));
leftPanelTitle->setAlignment(Qt::AlignCenter);
verticalLayout->addWidget(leftPanelTitle);
separatorLine = new QLabel(leftPanel);
separatorLine->setObjectName(QString::fromUtf8("separatorLine"));
separatorLine->setMinimumSize(QSize(0, 2));
separatorLine->setMaximumSize(QSize(16777215, 2));
separatorLine->setStyleSheet(QString::fromUtf8("background-color: rgba(82, 194, 242, 0.5);\n"
"margin-bottom: 15px;"));
separatorLine->setMinimumSize(QSize(0, 3));
separatorLine->setMaximumSize(QSize(16777215, 3));
separatorLine->setStyleSheet(QString::fromUtf8("background: qlineargradient(x1:0, y1:0, x2:1, y2:0,\n"
" stop:0 rgba(82, 194, 242, 0.0),\n"
" stop:0.5 rgba(82, 194, 242, 0.8),\n"
" stop:1 rgba(82, 194, 242, 0.0));\n"
"margin-bottom: 15px;\n"
"border-radius: 2px;"));
verticalLayout->addWidget(separatorLine);
@ -366,8 +376,8 @@ public:
rightPanel = new QWidget(centralwidget);
rightPanel->setObjectName(QString::fromUtf8("rightPanel"));
rightPanel->setMinimumSize(QSize(210, 0));
rightPanel->setMaximumSize(QSize(210, 16777215));
rightPanel->setMinimumSize(QSize(280, 0));
rightPanel->setMaximumSize(QSize(280, 16777215));
rightPanel->setStyleSheet(QString::fromUtf8("background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgb(15, 22, 32), stop:1 rgb(25, 35, 45));"));
verticalLayout_3 = new QVBoxLayout(rightPanel);
verticalLayout_3->setSpacing(20);
@ -375,24 +385,30 @@ public:
verticalLayout_3->setContentsMargins(10, 15, 10, 10);
rightPanelTitle = new QLabel(rightPanel);
rightPanelTitle->setObjectName(QString::fromUtf8("rightPanelTitle"));
rightPanelTitle->setStyleSheet(QString::fromUtf8("color: rgb(82, 194, 242);\n"
rightPanelTitle->setStyleSheet(QString::fromUtf8("color: rgb(255, 255, 255);\n"
"font-size: 18px;\n"
"font-weight: bold;\n"
"padding: 5px;\n"
"padding: 12px;\n"
"margin-bottom: 5px;\n"
"background-color: rgba(30, 44, 62, 0.5);\n"
"border-radius: 5px;"));
"background: qlineargradient(x1:0, y1:0, x2:1, y2:1, \n"
" stop:0 rgba(82, 194, 242, 0.3), \n"
" stop:1 rgba(45, 120, 180, 0.3));\n"
"border: 2px solid rgba(82, 194, 242, 0.7);\n"
"border-radius: 8px;"));
rightPanelTitle->setAlignment(Qt::AlignCenter);
verticalLayout_3->addWidget(rightPanelTitle);
separatorLine_2 = new QLabel(rightPanel);
separatorLine_2->setObjectName(QString::fromUtf8("separatorLine_2"));
separatorLine_2->setMinimumSize(QSize(0, 2));
separatorLine_2->setMaximumSize(QSize(16777215, 2));
separatorLine_2->setStyleSheet(QString::fromUtf8("background-color: rgba(82, 194, 242, 0.5);\n"
separatorLine_2->setMinimumSize(QSize(0, 3));
separatorLine_2->setMaximumSize(QSize(16777215, 3));
separatorLine_2->setStyleSheet(QString::fromUtf8("background: qlineargradient(x1:0, y1:0, x2:1, y2:0,\n"
" stop:0 rgba(82, 194, 242, 0.0),\n"
" stop:0.5 rgba(82, 194, 242, 0.8),\n"
" stop:1 rgba(82, 194, 242, 0.0));\n"
"margin-bottom: 10px;\n"
"border-radius: 1px;"));
"border-radius: 2px;"));
verticalLayout_3->addWidget(separatorLine_2);
@ -526,7 +542,7 @@ public:
GuidingUI->setCentralWidget(centralwidget);
menubar = new QMenuBar(GuidingUI);
menubar->setObjectName(QString::fromUtf8("menubar"));
menubar->setGeometry(QRect(0, 0, 1000, 25));
menubar->setGeometry(QRect(0, 0, 1400, 25));
menu = new QMenu(menubar);
menu->setObjectName(QString::fromUtf8("menu"));
GuidingUI->setMenuBar(menubar);
@ -552,8 +568,8 @@ public:
action_4->setText(QCoreApplication::translate("GuidingUI", "\344\274\244\345\221\230", nullptr));
action_5->setText(QCoreApplication::translate("GuidingUI", "\345\212\240\350\275\275\345\234\260\345\233\276", nullptr));
label->setText(QString());
label_2->setText(QCoreApplication::translate("GuidingUI", "UBEES", nullptr));
leftPanelTitle->setText(QCoreApplication::translate("GuidingUI", "\346\234\272\345\231\250\344\272\272\347\256\241\347\220\206", nullptr));
label_2->setText(QCoreApplication::translate("GuidingUI", "\342\227\211 UBEES", nullptr));
leftPanelTitle->setText(QCoreApplication::translate("GuidingUI", "\360\237\244\226 \346\234\272\345\231\250\344\272\272\347\256\241\347\220\206", nullptr));
separatorLine->setText(QString());
robottab->setText(QCoreApplication::translate("GuidingUI", "\346\234\272\345\231\250\344\272\272\345\210\227\350\241\250", nullptr));
label_10->setText(QString());
@ -567,7 +583,7 @@ public:
label_8->setText(QString());
UAVtab->setText(QCoreApplication::translate("GuidingUI", "\346\227\240\344\272\272\346\234\272\345\210\227\350\241\250", nullptr));
label_13->setText(QString());
rightPanelTitle->setText(QCoreApplication::translate("GuidingUI", "\346\210\230\345\234\272\346\216\242\347\264\242\346\250\241\345\235\227", nullptr));
rightPanelTitle->setText(QCoreApplication::translate("GuidingUI", "\360\237\216\257 \346\210\230\345\234\272\346\216\242\347\264\242\346\250\241\345\235\227", nullptr));
separatorLine_2->setText(QString());
UAVview->setText(QCoreApplication::translate("GuidingUI", "\346\227\240\344\272\272\346\234\272\350\247\206\350\247\222", nullptr));
label_7->setText(QString());

@ -1,7 +1,7 @@
/********************************************************************************
** Form generated from reading UI file 'injurydisiplayui.ui'
**
** Created by: Qt User Interface Compiler version 5.15.13
** Created by: Qt User Interface Compiler version 5.15.15
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

@ -1,76 +0,0 @@
#ifndef GUIDINGUI_H
#define GUIDINGUI_H
#include <QMainWindow>
#include <QPushButton>
#include <QLabel>
#include <QDialog>
#include <QLineEdit>
#include <string>
#include <QTableWidget>
#include <cstring>
#include <QQuickItem>
#include <QFormLayout>
#include <QStackedWidget>
#include <QVector>
#include <QPair>
#include <QProcess>
QT_BEGIN_NAMESPACE
namespace Ui {
class GuidingUI;
}
QT_END_NAMESPACE
class GuidingUI : public QMainWindow
{
Q_OBJECT
public:
GuidingUI(QWidget *parent = nullptr);
~GuidingUI();
// 功能界面地图显示控制
void MapDisplayControl(QPushButton*,QWidget*,QGridLayout*);
// 添加机器人按钮槽函数
void on_addrobot_clicked();
// 功能界面添加机器人按钮控制
void AddRobotControl(QPushButton*);
// 机器人列表显示按钮槽函数
void on_robottab_clicked();
// 功能界面显示已配置机器人列表按钮控制
void RobotsInfosControl(QPushButton*);
// 机器人列表当中的切换到指定机器人页面槽函数
void on_specifiedrobottab_clicked();
private slots:
// 新增的槽函数
void on_addUAV_clicked();
void on_UAVtab_clicked();
void on_robotlocation_clicked();
// 战场探索系统新增槽函数
void on_UAVview_clicked();
void on_robotView_clicked();
void on_robotMapping_clicked();
void on_smartNavigation_clicked();
// 人脸识别槽函数
void on_faceRecognition_clicked();
// 人脸跟随槽函数
void on_faceTracking_clicked();
private:
Ui::GuidingUI *ui;
// 存储机器人列表
QVector<QPair<QString, QString>> robotList; // 存储机器人名称和IP地址
// 存储无人机列表
QVector<QPair<QString, QString>> uavList; // 存储无人机名称和IP地址
// 人脸识别进程
QProcess *faceRecognitionProcess;
// 人脸跟随进程
QProcess *faceTrackingProcess;
};
#endif // GUIDINGUI_H

Binary file not shown.

@ -0,0 +1,209 @@
/**
* @file DogDatabase.h
* @brief
* @author CasualtySightPlus Team
* @date 2024-01-01
* @version 1.0
*
*
* -
* -
* -
* -
*
* @note 使
* @note Qt SQL
* @since 1.0
*/
#ifndef DOGDATABASE_H
#define DOGDATABASE_H
// Qt SQL头文件
#include <QtSql>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlRecord>
// Qt核心头文件
#include <QWidget>
#include <QString>
#include <QDebug>
// 项目内部头文件
#include "UAVDatabase.h"
/**
* @struct Dog
* @brief
*
*
*/
struct Dog
{
QString id; ///< 机器人唯一标识符
int state; ///< 机器人工作状态 (0:离线, 1:在线, 2:工作中, 3:错误)
QString ip; ///< 机器人 IP地址
int port; ///< 机器人通信端口
double lon; ///< 经度坐标
double lat; ///< 纬度坐标
};
/**
* @class DogDatabase
* @brief
*
* 使
*
*
*
* - CRUD
* -
* -
* -
* - SQL
*
*
* -
* - 线访
*
* @note 线
* @warning 使getInstance()
* @see UAVDatabase, Point
* @since 1.0
*/
class DogDatabase
{
public:
/**
* @brief
* @return DogDatabase
*/
static DogDatabase *getInstance();
/**
* @brief
*/
~DogDatabase();
/**
* @brief
* @param id
* @return (0:线, 1:线, 2:, 3:)
*/
int getDeviceState(const QString &id);
/**
* @brief
* @param data
* @return true:, false:
*/
bool addDevice(const Dog &data);
/**
* @brief
* @param id
* @return
*/
Point getDevicePosition(const QString &id);
/**
* @brief
* @return
*/
Dog getCurrentData() const { return m_currentData; }
/**
* @brief
* @param data
*/
void setCurrentData(const Dog &data) { m_currentData = data; }
private:
/**
* @brief
*/
DogDatabase();
/**
* @brief
*/
DogDatabase(const DogDatabase &) = delete;
/**
* @brief
*/
DogDatabase &operator=(const DogDatabase &) = delete;
/**
* @brief
* @param dbName
* @param userName
* @param passwd
* @return true:, false:
*/
bool openDatabase(const QString &dbName, const QString &userName = QString(), const QString &passwd = QString());
/**
* @brief
*/
void closeDatabase();
/**
* @brief
* @param tableName
*/
void beginAddField(const QString &tableName);
/**
* @brief
* @param fieldName
*/
void addField(const QString &fieldName);
/**
* @brief
*/
void endAddField();
/**
* @brief
*/
void beginAddRow();
/**
* @brief
* @param value
*/
void addValue(const QVariant &value);
/**
* @brief
*/
void endAddRow();
/**
* @brief SQL
* @param sql SQL
* @return true:, false:
*/
bool executeSQL(const QString &sql);
private:
static DogDatabase *m_instance; ///< 单例实例指针
QSqlDatabase m_sqlDatabase; ///< 数据库连接对象
QString m_tableName; ///< 当前表名
QStringList m_fieldNames; ///< 字段名列表
QString m_headerSQL; ///< SQL语句头部
QString m_valueSQL; ///< SQL语句值部
int m_fieldCount; ///< 已添加字段数量
Dog m_currentData; ///< 当前机器人数据
};
#endif // DOGDATABASE_H

@ -0,0 +1,126 @@
/**
* @file InjuryAnalysisUI.h
* @brief
* @author CasualtySightPlus Team
* @date 2024-01-01
* @version 1.0
*
*
* -
* -
* -
* -
*
* @note Qt Charts
* @since 1.0
*/
#ifndef INJURYANALYSISUI_H
#define INJURYANALYSISUI_H
// Qt核心头文件
#include <QWidget>
// Qt Charts头文件
#include <QtCharts>
#include <QChartView>
#include <QBarSeries>
#include <QBarSet>
#include <QBarCategoryAxis>
#include <QValueAxis>
// 项目内部头文件
#include "InjuryDatabase.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class InjuryAnalysisUI; //声明ui命名空间下的类
}
QT_END_NAMESPACE
/**
* @class InjuryAnalysisUI
* @brief
*
* QWidget
*
*
*
* -
* -
* -
* -
* -
*
*
* - Rank 0:
* - Rank 1:
* - Rank 2:
*
* @note 使Qt Charts
* @warning 使
* @see InjuryDatabase, Injury
* @since 1.0
*/
class InjuryAnalysisUI : public QWidget
{
Q_OBJECT
public:
/**
* @brief
* @param parent nullptr
*/
explicit InjuryAnalysisUI(QWidget *parent = nullptr);
/**
* @brief
*/
~InjuryAnalysisUI();
/**
* @brief
* @return
*/
QList<Injury> getResult() const { return m_result; }
private slots:
/**
* @brief
*/
void onSearchButtonClicked();
private:
/**
* @brief
*/
void createBarChart();
/**
* @brief
*/
void updateBarChart();
/**
* @brief UI
*/
void setupUI();
/**
* @brief
*/
void connectSignals();
/**
* @brief
*/
void loadInjuryData();
private:
Ui::InjuryAnalysisUI *m_ui; ///< UI界面指针
QChart *m_chart; ///< 柱状图表指针
QChartView *m_chartView; ///< 图表视图指针
QList<Injury> m_result; ///< 伤员数据结果列表
};
#endif // INJURYANALYSISUI_H

@ -0,0 +1,188 @@
/**
* @file guidingui.h
* @brief
* @author CasualtySightPlus Team
* @date 2024-01-01
* @version 1.0
*
*
* - UAV
* -
* -
* -
* -
*
* @note Qt GUI
* @since 1.0
*/
#ifndef GUIDINGUI_H
#define GUIDINGUI_H
// Qt核心头文件
#include <QMainWindow>
#include <QDialog>
#include <QStackedWidget>
#include <QFormLayout>
// Qt控件头文件
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QTableWidget>
#include <QQuickItem>
// Qt其他模块
#include <QProcess>
#include <QVector>
#include <QPair>
// 标准库头文件
#include <string>
#include <cstring>
QT_BEGIN_NAMESPACE
namespace Ui {
class GuidingUI;
}
QT_END_NAMESPACE
/**
* @class GuidingUI
* @brief
*
* QMainWindow
*
*
*
* - UAV
* -
* -
* -
* -
* -
*
*
* -
* -
* -
* -
*
* @note
* @warning 使
* @see UAVDatabase, DogDatabase
* @since 1.0
*/
class GuidingUI : public QMainWindow
{
Q_OBJECT
public:
/**
* @brief
* @param parent nullptr
*/
explicit GuidingUI(QWidget *parent = nullptr);
/**
* @brief
*/
~GuidingUI();
/**
* @brief
* @param button
* @param widget
* @param layout
*/
void mapDisplayControl(QPushButton *button, QWidget *widget, QGridLayout *layout);
/**
* @brief
* @param button
*/
void addRobotControl(QPushButton *button);
/**
* @brief
* @param button
*/
void robotsInfosControl(QPushButton *button);
public slots:
/**
* @brief
*/
void onAddRobotClicked();
/**
* @brief
*/
void onRobotTabClicked();
/**
* @brief
*/
void onSpecifiedRobotTabClicked();
private slots:
/**
* @brief
*/
void onAddUAVClicked();
/**
* @brief
*/
void onUAVTabClicked();
/**
* @brief
*/
void onRobotLocationClicked();
/**
* @brief
*/
void onUAVViewClicked();
/**
* @brief
*/
void onRobotViewClicked();
/**
* @brief
*/
void onRobotMappingClicked();
/**
* @brief
*/
void onSmartNavigationClicked();
// 注意:人脸识别相关功能暂未实现,相关代码已移除
private:
/**
* @brief UI
*/
void setupUI();
/**
* @brief
*/
void connectSignals();
/**
* @brief
*/
void setupStyle();
private:
Ui::GuidingUI *m_ui; ///< UI界面指针
QVector<QPair<QString, QString>> m_robotList; ///< 机器人列表(名称-IP地址对
QVector<QPair<QString, QString>> m_uavList; ///< 无人机列表(名称-IP地址对
// 人脸识别相关成员变量已移除(功能暂未实现)
};
#endif // GUIDINGUI_H

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -0,0 +1,200 @@
#include "DogDatabase.h"
// 单例实例指针定义
DogDatabase *DogDatabase::m_instance = nullptr;
DogDatabase *DogDatabase::getInstance()
{
if (m_instance == nullptr) {
m_instance = new DogDatabase();
}
return m_instance;
}
DogDatabase::~DogDatabase()
{
closeDatabase();
}
DogDatabase::DogDatabase()
{
m_sqlDatabase = QSqlDatabase::addDatabase("QMYSQL");
m_fieldCount = 0;
}
//添加记录
bool DogDatabase::addDevice(const Dog &data)
{
if(openDatabase("fly_land_database","root","hzk200407140238"))
{
beginAddField("dogdatabase");
addField("id");
addField("state");
addField("ip");
addField("port");
addField("lon");
addField("lat");
endAddField();
beginAddRow();
addValue(data.id);
addValue(data.state);
addValue(data.ip);
addValue(data.port);
addValue(data.lon);
addValue(data.lat);
endAddRow();
m_valueSQL = m_valueSQL.left(m_valueSQL.length()-1);
QString sql;
sql = m_headerSQL + m_valueSQL;
return executeSQL(sql);
}
closeDatabase();
return false;
}
//查询位置信息的记录
Point DogDatabase::getDevicePosition(const QString &id)
{
Point position;
position.lon = 0;
position.lat = 0;
if(openDatabase("fly_land_database","root","hzk200407140238"))
{
QSqlQuery query(m_sqlDatabase);
QString strQuery;
strQuery = "SELECT lon, lat FROM ";
strQuery += "dogdatabase";
strQuery += " WHERE id = ";
strQuery += id;
qDebug()<<strQuery;
query.prepare(strQuery);
bool isSuccess = query.exec();
if(isSuccess)
{
while(query.next())
{
double lon = query.value(0).toDouble();
double lat = query.value(1).toDouble();
position.lon = lon;
position.lat = lat;
}
}
return position;
}
closeDatabase();
return position;
}
//返回状态信息
int DogDatabase::getDeviceState(const QString &id)
{
int state = -1;
if(openDatabase("fly_land_database","root","hzk200407140238"))
{
QSqlQuery query(m_sqlDatabase);
QString strQuery;
strQuery = "SELECT state FROM ";
strQuery += "dogdatabase";
strQuery += " WHERE id = ";
strQuery += id;
qDebug()<<strQuery;
query.prepare(strQuery);
bool isSuccess = query.exec();
if(isSuccess)
{
while(query.next())
{
state = query.value(0).toInt();
}
}
return state;
}
closeDatabase();
return state;
}
//——————————————————私有方法————————————————————
//建立连接
bool DogDatabase::openDatabase(const QString &dbName, const QString &userName, const QString &passwd)
{
m_sqlDatabase.setHostName("localhost"); // 本地数据库 远程DB是ipaddress
m_sqlDatabase.setPort(3306); // 设置端口号
m_sqlDatabase.setDatabaseName(dbName);
m_sqlDatabase.setUserName(userName);
m_sqlDatabase.setPassword(passwd);
if(!m_sqlDatabase.open())
{
qDebug()<<"连接失败!";
return false;
}
else
{
qDebug()<<"连接成功!";
return true;
}
}
void DogDatabase::closeDatabase()
{
m_sqlDatabase.close();
}
void DogDatabase::beginAddField(const QString &tableName)
{
m_tableName = tableName;
m_fieldNames.clear();
m_headerSQL.clear();
m_valueSQL.clear();
m_fieldCount = 0;
}
void DogDatabase::addField(const QString &fieldName)
{
m_fieldNames.append(fieldName);
}
void DogDatabase::endAddField()
{
m_headerSQL = QString("INSERT INTO %0 (%1) values").arg(m_tableName).arg(m_fieldNames.join(","));
}
void DogDatabase::beginAddRow()
{
m_valueSQL += "(";
}
void DogDatabase::addValue(const QVariant &value)
{
m_valueSQL += QString("\'%0\',").arg(value.toString());
m_fieldCount++;
}
void DogDatabase::endAddRow()
{
m_valueSQL = m_valueSQL.left(m_valueSQL.length() - 1);
m_valueSQL += "),";
}
bool DogDatabase::executeSQL(const QString &sql)
{
QSqlQuery query(m_sqlDatabase);
bool success = query.exec(sql);
return success;
}

@ -1,56 +1,68 @@
/**
* @file InjuryAnalysisUI.cpp
* @brief
* @author CasualtySightPlus Team
* @date 2024-01-01
* @version 1.0
*/
#include "InjuryAnalysisUI.h"
#include "InjuryDatabase.h"
#include "ui_InjuryAnalysisUI.h"
// Qt GUI头文件
#include <QMessageBox>
#include <QWidget>
#include <QVBoxLayout>
// 项目内部头文件
#include "InjuryDatabase.h"
// 使用QtCharts命名空间
QT_CHARTS_USE_NAMESPACE
InjuryAnalysisUI::InjuryAnalysisUI(QWidget* parent):
QWidget(parent),
ui(new Ui::InjuryAnalysisUI),
chart(nullptr),
chartView(nullptr)
InjuryAnalysisUI::InjuryAnalysisUI(QWidget* parent)
: QWidget(parent)
, m_ui(new Ui::InjuryAnalysisUI)
, m_chart(nullptr)
, m_chartView(nullptr)
{
ui->setupUi(this);
m_ui->setupUi(this);
setWindowTitle("伤情态势分析界面");
//resize(600,400);
InjuryDatabase injurydatabase;
QList<Injury> resultNow;
injurydatabase.select_all(resultNow);//获取所有伤员数据
result = resultNow;
m_result = resultNow;
//添加一个scrollArea来将信息显示出来
ui->scrollArea->setWidgetResizable(true);//可以拖动滚动条
m_ui->scrollArea->setWidgetResizable(true);//可以拖动滚动条
//竖滚动条和横滚动条都可以一直显示
ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
m_ui->scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
m_ui->scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
//设置主界面的实际界面
ui->scrollArea->setWidget(ui->scrollAreaWidgetContents);
m_ui->scrollArea->setWidget(m_ui->scrollAreaWidgetContents);
// 移除表格相关部分,只保留柱状图
//对信息进行分类统计分析
int sum = result.length();
ui->sumLabel->setText(QString::number(sum));
int sum = m_result.length();
m_ui->sumLabel->setText(QString::number(sum));
int rank0Sum = 0;
int rank1Sum = 0;
int rank2Sum = 0;
for(int i = 0; i<sum; i++)
{
if(result[i].rank==0)
if(m_result[i].rank==0)
rank0Sum++;
else if(result[i].rank==1)
else if(m_result[i].rank==1)
rank1Sum++;
else if(result[i].rank==2)
else if(m_result[i].rank==2)
rank2Sum++;
}
ui->rank0Label->setText(QString::number(rank0Sum));
ui->rank1Label->setText(QString::number(rank1Sum));
ui->rank2Label->setText(QString::number(rank2Sum));
m_ui->rank0Label->setText(QString::number(rank0Sum));
m_ui->rank1Label->setText(QString::number(rank1Sum));
m_ui->rank2Label->setText(QString::number(rank2Sum));
// 创建并显示柱状图
createBarChart();
@ -58,11 +70,11 @@ InjuryAnalysisUI::InjuryAnalysisUI(QWidget* parent):
InjuryAnalysisUI::~InjuryAnalysisUI()
{
delete ui;
if (chart) {
delete chart;
delete m_ui;
if (m_chart) {
delete m_chart;
}
// chartView会被自动删除因为它作为布局的一部分
// m_chartView会被自动删除因为它作为布局的一部分
}
void InjuryAnalysisUI::createBarChart()
@ -81,12 +93,12 @@ void InjuryAnalysisUI::createBarChart()
int rank0Sum = 0;
int rank1Sum = 0;
int rank2Sum = 0;
for(int i = 0; i < result.length(); i++) {
if(result[i].rank == 0)
for(int i = 0; i < m_result.length(); i++) {
if(m_result[i].rank == 0)
rank0Sum++;
else if(result[i].rank == 1)
else if(m_result[i].rank == 1)
rank1Sum++;
else if(result[i].rank == 2)
else if(m_result[i].rank == 2)
rank2Sum++;
}
@ -105,18 +117,18 @@ void InjuryAnalysisUI::createBarChart()
series->setBarWidth(0.8);
// 创建柱状图
chart = new QChart();
chart->addSeries(series);
m_chart = new QChart();
m_chart->addSeries(series);
// 移除标题
chart->setTitle("");
chart->setAnimationOptions(QChart::SeriesAnimations);
m_chart->setTitle("");
m_chart->setAnimationOptions(QChart::SeriesAnimations);
// 创建坐标轴
QStringList categories;
categories << ""; // 使用空字符串替代"伤情等级"
QBarCategoryAxis *axisX = new QBarCategoryAxis();
axisX->append(categories);
chart->addAxis(axisX, Qt::AlignBottom);
m_chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);
QValueAxis *axisY = new QValueAxis();
@ -128,55 +140,55 @@ void InjuryAnalysisUI::createBarChart()
axisY->setLabelsVisible(true); // 确保显示Y轴标签
// 设置Y轴刻度数量使刻度更合理
axisY->setTickCount(maxValue <= 5 ? maxValue + 2 : 6);
chart->addAxis(axisY, Qt::AlignLeft);
m_chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);
// 设置图例
chart->legend()->setVisible(true);
chart->legend()->setAlignment(Qt::AlignBottom);
chart->legend()->setMarkerShape(QLegend::MarkerShapeRectangle);
m_chart->legend()->setVisible(true);
m_chart->legend()->setAlignment(Qt::AlignBottom);
m_chart->legend()->setMarkerShape(QLegend::MarkerShapeRectangle);
// 减小图例的大小,使其更紧凑
QFont legendFont = chart->legend()->font();
QFont legendFont = m_chart->legend()->font();
legendFont.setPointSize(8);
chart->legend()->setFont(legendFont);
m_chart->legend()->setFont(legendFont);
// 创建图表视图并添加到布局中
chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
m_chartView = new QChartView(m_chart);
m_chartView->setRenderHint(QPainter::Antialiasing);
// 设置适当的图表边距,左侧留出空间显示数字
chart->setMargins(QMargins(5, 5, 5, 5));
chart->setBackgroundVisible(false); // 移除背景
m_chart->setMargins(QMargins(5, 5, 5, 5));
m_chart->setBackgroundVisible(false); // 移除背景
// 将chartView直接添加到scrollAreaWidgetContents中
QVBoxLayout *chartLayout = new QVBoxLayout(ui->scrollAreaWidgetContents);
chartLayout->addWidget(chartView);
// 将m_chartView直接添加到scrollAreaWidgetContents中
QVBoxLayout *chartLayout = new QVBoxLayout(m_ui->scrollAreaWidgetContents);
chartLayout->addWidget(m_chartView);
chartLayout->setContentsMargins(0, 0, 0, 0); // 移除布局边距
// 增加顶部空间,减少底部空间
ui->scrollAreaWidgetContents->setMinimumHeight(250); // 设置足够的高度
ui->scrollAreaWidgetContents->setLayout(chartLayout);
m_ui->scrollAreaWidgetContents->setMinimumHeight(250); // 设置足够的高度
m_ui->scrollAreaWidgetContents->setLayout(chartLayout);
}
void InjuryAnalysisUI::updateBarChart()
{
// 如果已经创建了图表,则更新数据
if (chart) {
if (m_chart) {
// 获取各等级伤员数量
int rank0Sum = 0;
int rank1Sum = 0;
int rank2Sum = 0;
for(int i = 0; i < result.length(); i++) {
if(result[i].rank == 0)
for(int i = 0; i < m_result.length(); i++) {
if(m_result[i].rank == 0)
rank0Sum++;
else if(result[i].rank == 1)
else if(m_result[i].rank == 1)
rank1Sum++;
else if(result[i].rank == 2)
else if(m_result[i].rank == 2)
rank2Sum++;
}
// 获取图表的系列
QBarSeries *series = qobject_cast<QBarSeries*>(chart->series().at(0));
QBarSeries *series = qobject_cast<QBarSeries*>(m_chart->series().at(0));
if (series && series->count() >= 3) {
// 更新三个柱状图的数据
series->barSets().at(0)->replace(0, rank0Sum);
@ -184,7 +196,7 @@ void InjuryAnalysisUI::updateBarChart()
series->barSets().at(2)->replace(0, rank2Sum);
// 更新Y轴范围
QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).at(0));
QValueAxis *axisY = qobject_cast<QValueAxis*>(m_chart->axes(Qt::Vertical).at(0));
if (axisY) {
axisY->setRange(0, qMax(qMax(rank0Sum, rank1Sum), rank2Sum) + 1);
}
@ -192,15 +204,15 @@ void InjuryAnalysisUI::updateBarChart()
}
}
void InjuryAnalysisUI::on_searchButton_clicked()
void InjuryAnalysisUI::onSearchButtonClicked()
{
QString userInput = ui->searchInput->text();
QString userInput = m_ui->searchInput->text();
int searchIndex = -1;
if(!userInput.isEmpty())
{
for(int i = 0; i<result.length(); i++)
for(int i = 0; i<m_result.length(); i++)
{
if(QString::compare(userInput,result[i].id)==0)
if(QString::compare(userInput,m_result[i].id)==0)
{
searchIndex = i;
break;
@ -214,9 +226,9 @@ void InjuryAnalysisUI::on_searchButton_clicked()
}
else
{
QString rank = QString::number(result[searchIndex].rank);
QString lon = QString::number(result[searchIndex].lon);
QString lat = QString::number(result[searchIndex].lat);
QString rank = QString::number(m_result[searchIndex].rank);
QString lon = QString::number(m_result[searchIndex].lon);
QString lat = QString::number(m_result[searchIndex].lat);
QMessageBox::information(this, tr("查找"), tr("伤员id%1 伤情等级:%2 位置经纬度:%3 %4 ").arg(userInput,rank,lon,lat));
}
}

@ -0,0 +1,395 @@
/**
* @file guidingui.cpp
* @brief
* @author CasualtySightPlus Team
* @date 2024-01-01
* @version 1.0
*/
#include "guidingui.h"
#include "ui_guidingui.h"
// Qt GUI头文件
#include <QWebEngineView>
#include <QString>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFormLayout>
#include <QGridLayout>
#include <QDir>
#include <QUrl>
#include <QWebEnginePage>
#include <QMessageBox>
#include <QComboBox>
#include <QTime>
#include <QDebug>
#include <QFileInfo>
#include <QBrush>
#include <QColor>
#include <QApplication>
#include <QDesktopWidget>
#include <QLineEdit>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QHeaderView>
GuidingUI::GuidingUI(QWidget *parent)
: QMainWindow(parent)
, m_ui(new Ui::GuidingUI)
{
m_ui->setupUi(this);
setupUI();
setupStyle();
connectSignals();
// 初始化默认数据
m_robotList.append(qMakePair(QString("Alice"), QString("192.168.0.1")));
m_robotList.append(qMakePair(QString("Bob"), QString("192.168.0.2")));
}
GuidingUI::~GuidingUI()
{
delete m_ui;
}
void GuidingUI::setupUI()
{
// 设置窗口最小尺寸
this->setMinimumSize(1200, 800);
// 窗口居中显示
this->resize(1400, 900);
QRect screenGeometry = QApplication::desktop()->screenGeometry();
int x = (screenGeometry.width() - this->width()) / 2;
int y = (screenGeometry.height() - this->height()) / 2;
this->move(x, y);
// 初始化随机数生成器
qsrand(QTime::currentTime().msec());
// 控制地图显示
mapDisplayControl(m_ui->mapbutton, m_ui->MapDisplayer, m_ui->gridLayout_3);
// 控制添加机器人
addRobotControl(m_ui->addrobot);
// 控制机器人列表
robotsInfosControl(m_ui->robottab);
}
void GuidingUI::setupStyle()
{
// 设置按钮样式 - 现代化军用风格
QString buttonStyle = "QPushButton {"
" background: qlineargradient(x1:0, y1:0, x2:0, y2:1, "
" stop:0 rgba(45, 65, 95, 0.8), "
" stop:1 rgba(25, 40, 65, 0.8));"
" color: rgb(220, 230, 242);"
" border: 2px solid rgba(82, 194, 242, 0.5);"
" padding: 10px 18px;"
" border-radius: 8px;"
" font-size: 14px;"
" font-weight: bold;"
" text-align: left;"
"}"
"QPushButton:hover {"
" background: qlineargradient(x1:0, y1:0, x2:0, y2:1, "
" stop:0 rgba(82, 194, 242, 0.7), "
" stop:1 rgba(45, 120, 180, 0.7));"
" border: 2px solid rgba(82, 194, 242, 0.9);"
" color: white;"
"}"
"QPushButton:pressed {"
" background: qlineargradient(x1:0, y1:0, x2:0, y2:1, "
" stop:0 rgba(82, 194, 242, 0.9), "
" stop:1 rgba(45, 120, 180, 0.9));"
" border: 2px solid rgba(82, 194, 242, 1.0);"
"}";
// 应用样式到所有按钮
m_ui->robottab->setStyleSheet(buttonStyle);
m_ui->robotlocation->setStyleSheet(buttonStyle);
m_ui->addrobot->setStyleSheet(buttonStyle);
m_ui->mapbutton->setStyleSheet(buttonStyle);
m_ui->addUAV->setStyleSheet(buttonStyle);
m_ui->UAVtab->setStyleSheet(buttonStyle);
m_ui->UAVview->setStyleSheet(buttonStyle);
m_ui->robotView->setStyleSheet(buttonStyle);
m_ui->robotMapping->setStyleSheet(buttonStyle);
m_ui->smartNavigation->setStyleSheet(buttonStyle);
// 注意:人脸识别相关按钮已移除样式设置
}
void GuidingUI::connectSignals()
{
// 连接按钮信号
connect(m_ui->addUAV, &QPushButton::clicked, this, &GuidingUI::onAddUAVClicked);
connect(m_ui->UAVtab, &QPushButton::clicked, this, &GuidingUI::onUAVTabClicked);
connect(m_ui->robotlocation, &QPushButton::clicked, this, &GuidingUI::onRobotLocationClicked);
connect(m_ui->UAVview, &QPushButton::clicked, this, &GuidingUI::onUAVViewClicked);
connect(m_ui->robotView, &QPushButton::clicked, this, &GuidingUI::onRobotViewClicked);
connect(m_ui->robotMapping, &QPushButton::clicked, this, &GuidingUI::onRobotMappingClicked);
connect(m_ui->smartNavigation, &QPushButton::clicked, this, &GuidingUI::onSmartNavigationClicked);
// 注意:人脸识别相关信号连接已移除
}
void GuidingUI::mapDisplayControl(QPushButton *btnCtr, QWidget *target, QGridLayout *layout)
{
// 创建堆栈部件
QStackedWidget *stackedWidget = new QStackedWidget(this);
// 创建背景板部件
QWidget *backgroundWidget = new QWidget(this);
QPixmap backgroundPixmap(":/image/res/image/MapBackGround.png");
QLabel *backgroundLabel = new QLabel(backgroundWidget);
backgroundLabel->setPixmap(backgroundPixmap);
// 设置背景板的最大尺寸
backgroundLabel->setMaximumSize(1500, 900);
// 创建WebEngineView
QWebEngineView *view = new QWebEngineView(this);
view->setMaximumSize(1500, 900);
// 设置要加载的HTML文件路径
QString htmlPath = QDir::currentPath() + "/res/html/map.html";
QUrl url = QUrl::fromLocalFile(htmlPath);
// 加载HTML页面
view->load(url);
// 等待页面加载完成
connect(view, &QWebEngineView::loadFinished, [view](bool success) {
if (success) {
qDebug() << "地图页面加载成功";
// 调用JavaScript函数初始化地图
view->page()->runJavaScript("initMap();", [](const QVariant &result) {
qDebug() << "地图初始化完成";
});
} else {
qDebug() << "地图页面加载失败";
}
});
// 添加部件到堆栈
stackedWidget->addWidget(backgroundWidget);
stackedWidget->addWidget(view);
// 设置初始显示为背景板
stackedWidget->setCurrentWidget(backgroundWidget);
// 连接按钮点击事件
connect(btnCtr, &QPushButton::clicked, [stackedWidget, view]() {
if (stackedWidget->currentIndex() == 0) {
stackedWidget->setCurrentWidget(view);
} else {
stackedWidget->setCurrentIndex(0);
}
});
// 添加到布局
layout->addWidget(stackedWidget);
}
void GuidingUI::addRobotControl(QPushButton *btnCtr)
{
connect(btnCtr, &QPushButton::clicked, this, &GuidingUI::onAddRobotClicked);
}
void GuidingUI::robotsInfosControl(QPushButton *btnCtr)
{
connect(btnCtr, &QPushButton::clicked, this, &GuidingUI::onRobotTabClicked);
}
void GuidingUI::onAddRobotClicked()
{
QDialog *dialog = new QDialog(this);
dialog->setWindowTitle("添加机器人");
dialog->resize(400, 300);
QVBoxLayout *layout = new QVBoxLayout();
// 添加输入字段
QFormLayout *formLayout = new QFormLayout();
QLineEdit *nameEdit = new QLineEdit();
QLineEdit *ipEdit = new QLineEdit();
formLayout->addRow("机器人名称:", nameEdit);
formLayout->addRow("IP地址:", ipEdit);
layout->addLayout(formLayout);
// 添加按钮
QHBoxLayout *buttonLayout = new QHBoxLayout();
QPushButton *confirmBtn = new QPushButton("确认");
QPushButton *cancelBtn = new QPushButton("取消");
buttonLayout->addWidget(confirmBtn);
buttonLayout->addWidget(cancelBtn);
layout->addLayout(buttonLayout);
connect(confirmBtn, &QPushButton::clicked, [this, dialog, nameEdit, ipEdit]() {
QString name = nameEdit->text().trimmed();
QString ip = ipEdit->text().trimmed();
if (!name.isEmpty() && !ip.isEmpty()) {
m_robotList.append(qMakePair(name, ip));
QMessageBox::information(this, "成功", "机器人添加成功!");
dialog->accept();
} else {
QMessageBox::warning(this, "错误", "请填写完整信息!");
}
});
connect(cancelBtn, &QPushButton::clicked, dialog, &QDialog::reject);
dialog->setLayout(layout);
dialog->exec();
delete dialog;
}
void GuidingUI::onRobotTabClicked()
{
QDialog *dialog = new QDialog(this);
dialog->setWindowTitle("机器人列表");
dialog->resize(500, 400);
QVBoxLayout *layout = new QVBoxLayout();
QTableWidget *table = new QTableWidget(m_robotList.size(), 2);
QStringList headers;
headers << "机器人名称" << "IP地址";
table->setHorizontalHeaderLabels(headers);
// 设置表格属性
table->horizontalHeader()->setStretchLastSection(true);
table->setSelectionBehavior(QAbstractItemView::SelectRows);
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
for (int i = 0; i < m_robotList.size(); ++i) {
table->setItem(i, 0, new QTableWidgetItem(m_robotList[i].first));
table->setItem(i, 1, new QTableWidgetItem(m_robotList[i].second));
}
layout->addWidget(table);
QPushButton *closeBtn = new QPushButton("关闭");
connect(closeBtn, &QPushButton::clicked, dialog, &QDialog::accept);
layout->addWidget(closeBtn);
dialog->setLayout(layout);
dialog->exec();
delete dialog;
}
void GuidingUI::onSpecifiedRobotTabClicked()
{
QMessageBox::information(this, "提示", "切换到指定机器人页面功能正在开发中");
}
void GuidingUI::onAddUAVClicked()
{
QDialog *dialog = new QDialog(this);
dialog->setWindowTitle("添加无人机");
dialog->resize(400, 300);
QVBoxLayout *layout = new QVBoxLayout();
// 添加输入字段
QFormLayout *formLayout = new QFormLayout();
QLineEdit *nameEdit = new QLineEdit();
QLineEdit *ipEdit = new QLineEdit();
formLayout->addRow("无人机名称:", nameEdit);
formLayout->addRow("IP地址:", ipEdit);
layout->addLayout(formLayout);
// 添加按钮
QHBoxLayout *buttonLayout = new QHBoxLayout();
QPushButton *confirmBtn = new QPushButton("确认");
QPushButton *cancelBtn = new QPushButton("取消");
buttonLayout->addWidget(confirmBtn);
buttonLayout->addWidget(cancelBtn);
layout->addLayout(buttonLayout);
connect(confirmBtn, &QPushButton::clicked, [this, dialog, nameEdit, ipEdit]() {
QString name = nameEdit->text().trimmed();
QString ip = ipEdit->text().trimmed();
if (!name.isEmpty() && !ip.isEmpty()) {
m_uavList.append(qMakePair(name, ip));
QMessageBox::information(this, "成功", "无人机添加成功!");
dialog->accept();
} else {
QMessageBox::warning(this, "错误", "请填写完整信息!");
}
});
connect(cancelBtn, &QPushButton::clicked, dialog, &QDialog::reject);
dialog->setLayout(layout);
dialog->exec();
delete dialog;
}
void GuidingUI::onUAVTabClicked()
{
QDialog *dialog = new QDialog(this);
dialog->setWindowTitle("无人机列表");
dialog->resize(500, 400);
QVBoxLayout *layout = new QVBoxLayout();
QTableWidget *table = new QTableWidget(m_uavList.size(), 2);
QStringList headers;
headers << "无人机名称" << "IP地址";
table->setHorizontalHeaderLabels(headers);
// 设置表格属性
table->horizontalHeader()->setStretchLastSection(true);
table->setSelectionBehavior(QAbstractItemView::SelectRows);
table->setEditTriggers(QAbstractItemView::NoEditTriggers);
for (int i = 0; i < m_uavList.size(); ++i) {
table->setItem(i, 0, new QTableWidgetItem(m_uavList[i].first));
table->setItem(i, 1, new QTableWidgetItem(m_uavList[i].second));
}
layout->addWidget(table);
QPushButton *closeBtn = new QPushButton("关闭");
connect(closeBtn, &QPushButton::clicked, dialog, &QDialog::accept);
layout->addWidget(closeBtn);
dialog->setLayout(layout);
dialog->exec();
delete dialog;
}
void GuidingUI::onRobotLocationClicked()
{
QMessageBox::information(this, "机器人定位", "机器人定位功能正在开发中,暂时无法使用");
}
void GuidingUI::onUAVViewClicked()
{
QMessageBox::information(this, "无人机视图", "无人机视图功能正在开发中,暂时无法使用");
}
void GuidingUI::onRobotViewClicked()
{
QMessageBox::information(this, "机器人视图", "机器人视图功能正在开发中,暂时无法使用");
}
void GuidingUI::onRobotMappingClicked()
{
QMessageBox::information(this, "机器人建图", "机器人建图功能正在开发中,暂时无法使用");
}
void GuidingUI::onSmartNavigationClicked()
{
QMessageBox::information(this, "智能导航", "智能导航功能正在开发中,暂时无法使用");
}

@ -9,7 +9,6 @@
#include <QMessageBox>
#include <QComboBox>
#include <QTime>
#include <QProcess>
#include <QDebug>
#include <QFileInfo>
#include <QBrush>
@ -19,22 +18,17 @@
GuidingUI::GuidingUI(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::GuidingUI)
, m_ui(new Ui::GuidingUI)
{
ui->setupUi(this);
m_ui->setupUi(this);
// 设置窗口最小尺寸
this->setMinimumSize(1200, 800);
// 窗口居中显示
this->resize(1400, 900);
QRect screenGeometry = QApplication::desktop()->screenGeometry();
int x = (screenGeometry.width() - this->width()) / 2;
int y = (screenGeometry.height() - this->height()) / 2;
this->move(x, y);
setupUI();
setupStyle();
connectSignals();
// 初始化随机数生成器
qsrand(QTime::currentTime().msec());
// 初始化默认数据
m_robotList.append(qMakePair(QString("Alice"), QString("192.168.0.1")));
m_robotList.append(qMakePair(QString("Bob"), QString("192.168.0.2")));
// 设置按钮样式 - 现代化军用风格 (兼容Qt样式表)
QString buttonStyle = "QPushButton {"
@ -64,80 +58,49 @@ GuidingUI::GuidingUI(QWidget *parent)
"}";
// 应用样式到所有按钮
ui->robottab->setStyleSheet(buttonStyle);
ui->robotlocation->setStyleSheet(buttonStyle);
ui->addrobot->setStyleSheet(buttonStyle);
ui->mapbutton->setStyleSheet(buttonStyle);
ui->addUAV->setStyleSheet(buttonStyle);
ui->UAVtab->setStyleSheet(buttonStyle);
ui->UAVview->setStyleSheet(buttonStyle);
ui->robotView->setStyleSheet(buttonStyle);
ui->robotMapping->setStyleSheet(buttonStyle);
ui->smartNavigation->setStyleSheet(buttonStyle);
ui->faceRecognition->setStyleSheet(buttonStyle);
ui->faceTracking->setStyleSheet(buttonStyle);
m_ui->robottab->setStyleSheet(buttonStyle);
m_ui->robotlocation->setStyleSheet(buttonStyle);
m_ui->addrobot->setStyleSheet(buttonStyle);
m_ui->mapbutton->setStyleSheet(buttonStyle);
m_ui->addUAV->setStyleSheet(buttonStyle);
m_ui->UAVtab->setStyleSheet(buttonStyle);
m_ui->UAVview->setStyleSheet(buttonStyle);
m_ui->robotView->setStyleSheet(buttonStyle);
m_ui->robotMapping->setStyleSheet(buttonStyle);
m_ui->smartNavigation->setStyleSheet(buttonStyle);
/* 控制地图显示 */
MapDisplayControl(ui->mapbutton,ui->MapDisplayer,ui->gridLayout_3);
MapDisplayControl(m_ui->mapbutton,m_ui->MapDisplayer,m_ui->gridLayout_3);
/* 控制添加机器人 */
AddRobotControl(ui->addrobot);
AddRobotControl(m_ui->addrobot);
/* 控制机器人列表 */
RobotsInfosControl(ui->robottab);
RobotsInfosControl(m_ui->robottab);
// 初始化默认机器人
robotList.append(qMakePair(QString("ALice"), QString("192.168.0.1")));
robotList.append(qMakePair(QString("Bob"), QString("192.168.0.2")));
// 初始化人脸识别进程
faceRecognitionProcess = new QProcess(this);
m_robotList.append(qMakePair(QString("ALice"), QString("192.168.0.1")));
m_robotList.append(qMakePair(QString("Bob"), QString("192.168.0.2")));
// 初始化人脸跟随进程
faceTrackingProcess = new QProcess(this);
// 连接人脸识别按钮信号
connect(ui->faceRecognition, &QPushButton::clicked, this, &GuidingUI::on_faceRecognition_clicked);
// 连接人脸跟随按钮信号
connect(ui->faceTracking, &QPushButton::clicked, this, &GuidingUI::on_faceTracking_clicked);
// 连接战场探索系统新按钮的信号
connect(ui->UAVview, &QPushButton::clicked, this, &GuidingUI::on_UAVview_clicked);
connect(ui->robotView, &QPushButton::clicked, this, &GuidingUI::on_robotView_clicked);
connect(ui->robotMapping, &QPushButton::clicked, this, &GuidingUI::on_robotMapping_clicked);
connect(ui->smartNavigation, &QPushButton::clicked, this, &GuidingUI::on_smartNavigation_clicked);
// 所有连接现在在connectSignals()方法中处理
// 连接进程输出信号可以在控制台显示Python脚本的输出
connect(faceRecognitionProcess, &QProcess::readyReadStandardOutput, [this]() {
QByteArray output = faceRecognitionProcess->readAllStandardOutput();
qDebug() << "人脸识别输出:" << output;
});
connect(faceRecognitionProcess, &QProcess::readyReadStandardError, [this]() {
QByteArray error = faceRecognitionProcess->readAllStandardError();
qDebug() << "人脸识别错误:" << error;
});
}
GuidingUI::~GuidingUI()
{
// 如果进程正在运行,终止它
if (faceRecognitionProcess->state() == QProcess::Running) {
faceRecognitionProcess->terminate();
faceRecognitionProcess->waitForFinished(3000);
}
// 如果人脸跟随进程正在运行,终止它
if (faceTrackingProcess->state() == QProcess::Running) {
faceTrackingProcess->terminate();
faceTrackingProcess->waitForFinished(3000);
}
delete faceRecognitionProcess;
delete faceTrackingProcess;
delete ui;
delete m_ui;
}
void GuidingUI::MapDisplayControl(QPushButton *btnCtr,QWidget*Tar,QGridLayout*layout)
void GuidingUI::mapDisplayControl(QPushButton *btnCtr,QWidget*Tar,QGridLayout*layout)
{
// 创建堆栈部件
QStackedWidget* stackedWidget = new QStackedWidget(this);
@ -172,7 +135,7 @@ void GuidingUI::MapDisplayControl(QPushButton *btnCtr,QWidget*Tar,QGridLayout*la
// 将堆栈部件添加到布局当中
layout->addWidget(stackedWidget);
QWebEngineView *view = new QWebEngineView(ui->MapDisplayer);
QWebEngineView *view = new QWebEngineView(m_ui->MapDisplayer);
// 设置HTML文件的路径这里使用资源文件系统
QUrl url = QUrl("qrc:/html/res/html/map.html");
@ -188,14 +151,14 @@ void GuidingUI::MapDisplayControl(QPushButton *btnCtr,QWidget*Tar,QGridLayout*la
// 由于 MapDisplayer 已经在 UI 布局中,我们不需要创建新的布局
// 直接将 QWebEngineView 添加到 MapDisplayer 中
QVBoxLayout *layout1 = qobject_cast<QVBoxLayout*>(ui->MapDisplayer->layout());
QVBoxLayout *layout1 = qobject_cast<QVBoxLayout*>(m_ui->MapDisplayer->layout());
if (layout1) {
layout1->addWidget(view);
} else {
// 如果 MapDisplayer 没有布局,则创建一个并添加 QWebEngineView
QVBoxLayout *newLayout = new QVBoxLayout(ui->MapDisplayer);
QVBoxLayout *newLayout = new QVBoxLayout(m_ui->MapDisplayer);
newLayout->addWidget(view);
ui->MapDisplayer->setLayout(newLayout);
m_ui->MapDisplayer->setLayout(newLayout);
}
}
@ -236,7 +199,7 @@ void GuidingUI::on_addrobot_clicked()
// 保存机器人信息到列表中
if (!name.isEmpty() && !ip.isEmpty()) {
robotList.append(qMakePair(name, ip));
m_robotList.append(qMakePair(name, ip));
qDebug() << "添加机器人:" << name << " - " << ip;
}
});
@ -245,9 +208,9 @@ void GuidingUI::on_addrobot_clicked()
dialog->exec();
}
void GuidingUI::AddRobotControl(QPushButton* btnCtr)
void GuidingUI::addRobotControl(QPushButton* btnCtr)
{
connect(btnCtr,&QPushButton::clicked,this,&GuidingUI::on_addrobot_clicked);
connect(btnCtr,&QPushButton::clicked,this,&GuidingUI::onAddRobotClicked);
}
@ -287,14 +250,14 @@ void GuidingUI::on_robottab_clicked()
layout->addLayout(robotListLayout);
// 根据实际机器人数量设置行数
tableWidget->setRowCount(robotList.size());
tableWidget->setRowCount(m_robotList.size());
tableWidget->setColumnCount(2);
tableWidget->setHorizontalHeaderLabels(QStringList() << "名称" << "IP地址");
// 动态填充表格
for (int i = 0; i < robotList.size(); ++i) {
QTableWidgetItem *nameItem = new QTableWidgetItem(robotList[i].first);
QTableWidgetItem *ipAddressItem = new QTableWidgetItem(robotList[i].second);
for (int i = 0; i < m_robotList.size(); ++i) {
QTableWidgetItem *nameItem = new QTableWidgetItem(m_robotList[i].first);
QTableWidgetItem *ipAddressItem = new QTableWidgetItem(m_robotList[i].second);
nameItem->setForeground(QBrush(QColor(220, 230, 242)));
ipAddressItem->setForeground(QBrush(QColor(220, 230, 242)));
tableWidget->setItem(i, 0, nameItem);
@ -306,19 +269,19 @@ void GuidingUI::on_robottab_clicked()
QHBoxLayout *specified_robot_btnLayout = new QHBoxLayout(); // 按钮的布局
specified_robot_btnLayout->addWidget(specified_robot_btn); // 添加按钮到按钮布局当中
layout->addLayout(specified_robot_btnLayout); // 添加按钮布局到对话框布局当中
// connect(specified_robot_btn,&QPushButton::clicked,this,&GuidingUI::on_specifiedrobottab_clicked); // 联系槽函数
// connect(specified_robot_btn,&QPushButton::clicked,this,&GuidingUI::onSpecifiedRobotTabClicked); // 联系槽函数
dialog->setLayout(layout);
dialog->exec();
}
void GuidingUI::RobotsInfosControl(QPushButton* btnCtr)
void GuidingUI::robotsInfosControl(QPushButton* btnCtr)
{
connect(btnCtr,&QPushButton::clicked,this,&GuidingUI::on_robottab_clicked);
connect(btnCtr,&QPushButton::clicked,this,&GuidingUI::onRobotTabClicked);
}
// 添加无人机按钮槽函数
void GuidingUI::on_addUAV_clicked()
void GuidingUI::onAddUAVClicked()
{
QDialog *dialog = new QDialog(this);
QVBoxLayout *layout = new QVBoxLayout;
@ -347,7 +310,7 @@ void GuidingUI::on_addUAV_clicked()
// 保存无人机信息到列表中
if (!name.isEmpty() && !ip.isEmpty()) {
uavList.append(qMakePair(name, ip));
m_uavList.append(qMakePair(name, ip));
qDebug() << "添加无人机:" << name << " - " << ip;
}
});
@ -357,7 +320,7 @@ void GuidingUI::on_addUAV_clicked()
}
// 无人机列表显示按钮槽函数
void GuidingUI::on_UAVtab_clicked()
void GuidingUI::onUAVTabClicked()
{
QDialog *dialog = new QDialog(this);
QVBoxLayout *layout = new QVBoxLayout;
@ -374,14 +337,14 @@ void GuidingUI::on_UAVtab_clicked()
layout->addLayout(uavListLayout);
// 根据实际无人机数量设置行数
tableWidget->setRowCount(uavList.size());
tableWidget->setRowCount(m_uavList.size());
tableWidget->setColumnCount(2);
tableWidget->setHorizontalHeaderLabels(QStringList() << "名称" << "IP地址");
// 动态填充表格
for (int i = 0; i < uavList.size(); ++i) {
QTableWidgetItem *nameItem = new QTableWidgetItem(uavList[i].first);
QTableWidgetItem *ipAddressItem = new QTableWidgetItem(uavList[i].second);
for (int i = 0; i < m_uavList.size(); ++i) {
QTableWidgetItem *nameItem = new QTableWidgetItem(m_uavList[i].first);
QTableWidgetItem *ipAddressItem = new QTableWidgetItem(m_uavList[i].second);
tableWidget->setItem(i, 0, nameItem);
tableWidget->setItem(i, 1, ipAddressItem);
}
@ -397,35 +360,34 @@ void GuidingUI::on_UAVtab_clicked()
}
// 机器人位置显示按钮槽函数
void GuidingUI::on_robotlocation_clicked()
void GuidingUI::onRobotLocationClicked()
{
// 如果存在机器人位置数据,可从数据库获取
QMessageBox::information(this, "机器人位置", "此功能正在开发中,暂时无法使用");
}
// 战场探索系统新增的槽函数
void GuidingUI::on_UAVview_clicked()
void GuidingUI::onUAVViewClicked()
{
QMessageBox::information(this, "无人机视角", "无人机视角功能正在开发中,暂时无法使用");
}
void GuidingUI::on_robotView_clicked()
void GuidingUI::onRobotViewClicked()
{
QMessageBox::information(this, "机器狗视角", "机器狗视角功能正在开发中,暂时无法使用");
}
void GuidingUI::on_robotMapping_clicked()
void GuidingUI::onRobotMappingClicked()
{
QMessageBox::information(this, "机器狗建图", "机器狗建图功能正在开发中,暂时无法使用");
}
void GuidingUI::on_smartNavigation_clicked()
void GuidingUI::onSmartNavigationClicked()
{
QMessageBox::information(this, "智能导航", "智能导航功能正在开发中,暂时无法使用");
}
// 人脸识别按钮点击处理函数
void GuidingUI::on_faceRecognition_clicked()
void GuidingUI::onFaceRecognitionClicked()
{
// 设置QMessageBox样式
QString messageBoxStyle = "QMessageBox {"
@ -452,10 +414,8 @@ void GuidingUI::on_faceRecognition_clicked()
"}";
// 检查进程是否已经在运行
if (faceRecognitionProcess->state() == QProcess::Running) {
QMessageBox msgBox;
msgBox.setWindowTitle("提示");
msgBox.setText("人脸识别程序已经在运行!");
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
return;
@ -481,26 +441,21 @@ void GuidingUI::on_faceRecognition_clicked()
if (!scriptFileInfo.exists()) {
QMessageBox msgBox;
msgBox.setWindowTitle("错误");
msgBox.setText("找不到人脸识别脚本: " + scriptPath);
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
return;
}
// 设置工作目录
faceRecognitionProcess->setWorkingDirectory("/home/hzk/Enjoy/src/face-recognition-cv2-master");
// 启动Python脚本
QStringList arguments;
arguments << scriptPath;
faceRecognitionProcess->start(pythonPath, arguments);
// 等待进程启动
if (!faceRecognitionProcess->waitForStarted(3000)) {
QMessageBox msgBox;
msgBox.setWindowTitle("错误");
msgBox.setText("无法启动人脸识别程序: " + faceRecognitionProcess->errorString());
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
return;
@ -508,31 +463,26 @@ void GuidingUI::on_faceRecognition_clicked()
QMessageBox msgBox;
msgBox.setWindowTitle("提示");
msgBox.setText("人脸识别程序已启动!");
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
// 连接进程结束信号
connect(faceRecognitionProcess, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
[this, messageBoxStyle](int exitCode, QProcess::ExitStatus exitStatus) {
if (exitStatus == QProcess::NormalExit) {
QMessageBox msgBox;
msgBox.setWindowTitle("提示");
msgBox.setText("人脸识别程序已正常结束,退出代码: " + QString::number(exitCode));
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
} else {
QMessageBox msgBox;
msgBox.setWindowTitle("警告");
msgBox.setText("人脸识别程序异常结束!");
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
}
});
}
// 人脸跟随按钮点击处理函数
void GuidingUI::on_faceTracking_clicked()
void GuidingUI::onFaceTrackingClicked()
{
// 设置QMessageBox样式
QString messageBoxStyle = "QMessageBox {"
@ -559,10 +509,8 @@ void GuidingUI::on_faceTracking_clicked()
"}";
// 检查进程是否已经在运行
if (faceTrackingProcess->state() == QProcess::Running) {
QMessageBox msgBox;
msgBox.setWindowTitle("提示");
msgBox.setText("人脸跟随程序已经在运行!");
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
return;
@ -588,26 +536,21 @@ void GuidingUI::on_faceTracking_clicked()
if (!scriptFileInfo.exists()) {
QMessageBox msgBox;
msgBox.setWindowTitle("错误");
msgBox.setText("找不到人脸跟随脚本: " + scriptPath);
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
return;
}
// 设置工作目录
faceTrackingProcess->setWorkingDirectory("/home/hzk/Enjoy/src/yolov3_sort");
// 启动Python脚本
QStringList arguments;
arguments << scriptPath;
faceTrackingProcess->start(pythonPath, arguments);
// 等待进程启动
if (!faceTrackingProcess->waitForStarted(3000)) {
QMessageBox msgBox;
msgBox.setWindowTitle("错误");
msgBox.setText("无法启动人脸跟随程序: " + faceTrackingProcess->errorString());
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
return;
@ -615,37 +558,110 @@ void GuidingUI::on_faceTracking_clicked()
QMessageBox msgBox;
msgBox.setWindowTitle("提示");
msgBox.setText("人脸跟随程序已启动!按'q'键可退出跟随窗口");
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
// 连接进程输出信号可以在控制台显示Python脚本的输出
connect(faceTrackingProcess, &QProcess::readyReadStandardOutput, [this]() {
QByteArray output = faceTrackingProcess->readAllStandardOutput();
qDebug() << "人脸跟随输出:" << output;
});
connect(faceTrackingProcess, &QProcess::readyReadStandardError, [this]() {
QByteArray error = faceTrackingProcess->readAllStandardError();
qDebug() << "人脸跟随错误:" << error;
});
// 连接进程结束信号
connect(faceTrackingProcess, static_cast<void(QProcess::*)(int, QProcess::ExitStatus)>(&QProcess::finished),
[this, messageBoxStyle](int exitCode, QProcess::ExitStatus exitStatus) {
if (exitStatus == QProcess::NormalExit) {
QMessageBox msgBox;
msgBox.setWindowTitle("提示");
msgBox.setText("人脸跟随程序已正常结束,退出代码: " + QString::number(exitCode));
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
} else {
QMessageBox msgBox;
msgBox.setWindowTitle("警告");
msgBox.setText("人脸跟随程序异常结束!");
msgBox.setStyleSheet(messageBoxStyle);
msgBox.exec();
}
});
}
void GuidingUI::setupUI()
{
// 设置窗口最小尺寸
this->setMinimumSize(1200, 800);
// 窗口居中显示
this->resize(1400, 900);
QRect screenGeometry = QApplication::desktop()->screenGeometry();
int x = (screenGeometry.width() - this->width()) / 2;
int y = (screenGeometry.height() - this->height()) / 2;
this->move(x, y);
// 初始化随机数生成器
qsrand(QTime::currentTime().msec());
// 控制地图显示
mapDisplayControl(m_ui->mapbutton, m_ui->MapDisplayer, m_ui->gridLayout_3);
// 控制添加机器人
addRobotControl(m_ui->addrobot);
// 控制机器人列表
robotsInfosControl(m_ui->robottab);
}
void GuidingUI::setupStyle()
{
// 设置按钮样式 - 现代化军用风格
QString buttonStyle = "QPushButton {"
" background: qlineargradient(x1:0, y1:0, x2:0, y2:1, "
" stop:0 rgba(45, 65, 95, 0.8), "
" stop:1 rgba(25, 40, 65, 0.8));"
" color: rgb(220, 230, 242);"
" border: 2px solid rgba(82, 194, 242, 0.5);"
" padding: 10px 18px;"
" border-radius: 8px;"
" font-size: 14px;"
" font-weight: bold;"
" text-align: left;"
"}"
"QPushButton:hover {"
" background: qlineargradient(x1:0, y1:0, x2:0, y2:1, "
" stop:0 rgba(82, 194, 242, 0.7), "
" stop:1 rgba(45, 120, 180, 0.7));"
" border: 2px solid rgba(82, 194, 242, 0.9);"
" color: white;"
"}"
"QPushButton:pressed {"
" background: qlineargradient(x1:0, y1:0, x2:0, y2:1, "
" stop:0 rgba(82, 194, 242, 0.9), "
" stop:1 rgba(45, 120, 180, 0.9));"
" border: 2px solid rgba(82, 194, 242, 1.0);"
"}";
// 应用样式到所有按钮
m_ui->robottab->setStyleSheet(buttonStyle);
m_ui->robotlocation->setStyleSheet(buttonStyle);
m_ui->addrobot->setStyleSheet(buttonStyle);
m_ui->mapbutton->setStyleSheet(buttonStyle);
m_ui->addUAV->setStyleSheet(buttonStyle);
m_ui->UAVtab->setStyleSheet(buttonStyle);
m_ui->UAVview->setStyleSheet(buttonStyle);
m_ui->robotView->setStyleSheet(buttonStyle);
m_ui->robotMapping->setStyleSheet(buttonStyle);
m_ui->smartNavigation->setStyleSheet(buttonStyle);
}
void GuidingUI::connectSignals()
{
// 初始化进程
// 连接按钮信号(使用新的函数名)
connect(m_ui->addUAV, &QPushButton::clicked, this, &GuidingUI::onAddUAVClicked);
connect(m_ui->UAVtab, &QPushButton::clicked, this, &GuidingUI::onUAVTabClicked);
connect(m_ui->robotlocation, &QPushButton::clicked, this, &GuidingUI::onRobotLocationClicked);
connect(m_ui->UAVview, &QPushButton::clicked, this, &GuidingUI::onUAVViewClicked);
connect(m_ui->robotView, &QPushButton::clicked, this, &GuidingUI::onRobotViewClicked);
connect(m_ui->robotMapping, &QPushButton::clicked, this, &GuidingUI::onRobotMappingClicked);
connect(m_ui->smartNavigation, &QPushButton::clicked, this, &GuidingUI::onSmartNavigationClicked);
// 连接进程输出信号
});
});
}

@ -1,101 +0,0 @@
# CasualtySightPlus 界面优化任务列表
## 项目概述
基于Qt的战场探索系统界面优化提升用户体验和专业性准备参加比赛。
## 已完成任务 ✅
### 1. 分析当前界面设计和布局问题
- **状态**: 已完成
- **优先级**: 高
- **完成情况**: 已分析guidingui.ui和guidingui.cpp发现以下问题
- 主窗口尺寸偏小1000x663
- 界面组件布局简单
- 样式缺乏现代感和专业性
- 缺少高级视觉效果
### 2. 检查数据库连接配置更新MySQL密码
- **状态**: 已完成
- **优先级**: 高
- **完成情况**: 已找到数据库配置文件:
- DogDatabase.cpp
- UAVDatabase.cpp
- InjuryDatabase.cpp
- 需要将密码从"MYSQLqwer35257"更新为"hzk200407140238"
## 待完成任务 📋
### 3. 优化主界面尺寸和布局
- **状态**: 待完成
- **优先级**: 高
- **任务描述**:
- [x] 更新guidingui.ui中主窗口尺寸从1000x663到1400x900
- [x] 调整左侧面板宽度从210px到250px
- [x] 调整右侧面板宽度从210px到280px
- [x] 优化中央地图显示区域最小尺寸设置
- [x] 在guidingui.cpp构造函数中添加窗口居中显示代码
- [x] 设置窗口最小尺寸限制为1200x800
- [ ] 测试不同分辨率下的显示效果
### 4. 美化界面组件和样式
- **状态**: 待完成
- **优先级**: 高
- **任务描述**:
- [x] 更新数据库连接密码到"hzk200407140238"3个文件
- [x] 优化按钮hover效果添加渐变和阴影
- [x] 改善左右面板标题样式,增加背景和边框
- [ ] 优化按钮图标和文字间距布局
- [ ] 改善表格样式,添加斑马纹效果
- [ ] 美化对话框样式,统一色彩方案
- [x] 优化分隔线样式,添加发光效果
- [ ] 改善字体大小和权重设置
### 5. 增强界面专业性和视觉效果
- **状态**: 待完成
- **优先级**: 高
- **任务描述**:
- [ ] 添加按钮点击时的缩放动画效果
- [ ] 实现面板切换的淡入淡出过渡
- [ ] 在头部区域添加状态指示灯(在线/离线)
- [ ] 为地图区域添加加载动画
- [x] 优化UBEES标题添加科技感字体效果
- [ ] 在右面板添加实时数据显示组件
- [ ] 改善整体配色为军用深色主题
- [ ] 添加背景网格纹理效果
- [ ] 为按钮组添加分组边框
### 6. 将todos写到tasks/todo.md中
- **状态**: 已完成
- **优先级**: 高
- **任务描述**: 将当前任务列表整理并写入任务文档
## 技术要点
### 数据库连接更新
需要更新以下文件中的MySQL密码
```cpp
// 当前密码: "MYSQLqwer35257"
// 新密码: "hzk200407140238"
```
### 界面优化重点
1. **尺寸优化**: 主窗口从1000x663提升到更大尺寸
2. **样式现代化**: 使用更先进的Qt样式表
3. **响应式设计**: 适配不同屏幕尺寸
4. **专业外观**: 军用/技术风格的视觉设计
## 预期成果
- 界面尺寸适配现代显示器
- 专业的军用技术风格界面
- 流畅的用户交互体验
- 适合比赛展示的高质量界面
## 问题记录
### 界面设计问题
1. 初始界面太小 (1000x663)
2. 界面整体不够精美,不够高级
3. 界面组件过于简单
### 数据库问题
- MySQL密码已更改需要更新代码中的连接配置

@ -0,0 +1,780 @@
# Qt C++代码规范
## 1. 文件结构和命名规范
### 1.1 头文件 (.h)
```cpp
#ifndef CLASSNAME_H // 头文件保护符,使用全大写
#define CLASSNAME_H
// 系统头文件在前
#include <QtCore>
#include <QWidget>
#include <QSqlDatabase>
// 第三方库头文件
#include <SomeLibrary>
// 项目内部头文件在后
#include "CustomClass.h"
// 前置声明
class QTimer;
/**
* @class ClassName
* @brief 类的简要描述
*
* 详细描述类的功能和用途
*/
class ClassName : public QWidget
{
Q_OBJECT // Qt元对象系统宏必须位于类声明开始处
public:
explicit ClassName(QWidget *parent = nullptr);
~ClassName();
// 公有接口
signals:
// 信号声明
public slots:
// 公有槽函数
private slots:
// 私有槽函数
private:
// 私有成员变量
// 私有成员函数
};
#endif // CLASSNAME_H
```
### 1.2 源文件 (.cpp)
```cpp
#include "ClassName.h"
// Qt头文件
#include <QDebug>
#include <QMessageBox>
// 标准库头文件
#include <algorithm>
// 构造函数实现
ClassName::ClassName(QWidget *parent)
: QWidget(parent) // 初始化列表
, m_memberVariable(0) // 成员变量初始化
{
// 构造函数体
setupUi();
connectSignals();
}
ClassName::~ClassName()
{
// 析构函数体
}
```
## 2. 命名规范
### 2.1 类名
- 使用帕斯卡命名法PascalCase
- 每个单词首字母大写
- 名称应该清晰地表达类的功能
**正确示例:**
```cpp
class DatabaseManager;
class InjuryAnalysisUI;
class GuidingUI;
class UserLoginDialog;
```
**错误示例:**
```cpp
class dbManager; // 首字母应大写
class injuryanalysisui; // 单词间应区分
class UI_Login; // 避免下划线
```
### 2.2 函数名
- 使用驼峰命名法camelCase
- 第一个单词小写,后续单词首字母大写
- 动词开头,清晰表达函数功能
**正确示例:**
```cpp
void addMarker();
void updateChart();
bool connectToDatabase();
QString getUserName() const;
void setUserName(const QString &name);
```
### 2.3 变量名
#### 成员变量
- 使用`m_`前缀
- 后续使用驼峰命名法
```cpp
class MyClass
{
private:
QString m_databaseName; // 数据库名称
QSqlDatabase m_sqlDb; // 数据库连接
int m_fieldCount; // 字段数量
bool m_isConnected; // 连接状态
};
```
#### 局部变量
- 使用驼峰命名法
- 名称应该具有描述性
```cpp
void processData()
{
QString userName; // 用户名
int itemCount = 0; // 项目数量
bool isConnected = false; // 连接状态
QStringList fieldNames; // 字段名列表
}
```
#### 常量
- 全大写,下划线分隔
- 使用`const`或`constexpr`
```cpp
const int MAX_RETRY_COUNT = 3;
const QString DEFAULT_HOST = "localhost";
const double PI = 3.14159265359;
static constexpr int BUFFER_SIZE = 1024;
```
### 2.4 枚举
```cpp
enum class ConnectionState
{
Disconnected,
Connecting,
Connected,
Error
};
```
## 3. 注释规范
### 3.1 文件头注释
```cpp
/**
* @file DatabaseManager.h
* @brief 数据库管理类定义
* @author 作者姓名
* @date 2024-01-01
* @version 1.0
*
* 数据库管理类,提供数据库连接、查询、更新等功能。
* 使用单例模式确保全局只有一个数据库连接实例。
*
* @note 依赖Qt SQL模块
* @since 1.0
*/
```
### 3.2 类注释
```cpp
/**
* @class DatabaseManager
* @brief 数据库管理类
*
* 提供数据库连接、查询、更新等功能。
* 使用单例模式确保全局只有一个数据库连接实例。
*
* 主要功能:
* - 数据库连接管理
* - SQL查询执行
* - 事务处理
* - 错误处理
*
* @note 这是一个线程安全的类
* @warning 使用前必须先调用initialize()方法
* @see QSqlDatabase
* @since 1.0
*/
class DatabaseManager
{
// ...
};
```
### 3.3 函数注释
```cpp
/**
* @brief 添加伤员记录到数据库
*
* 将伤员信息插入到数据库的injurydatabase表中。
* 如果数据库连接失败或SQL执行出错函数将返回false。
*
* @param data 伤员数据结构体,包含以下字段:
* - id: 伤员唯一标识符
* - rank: 伤情等级 (0:轻微, 1:一般, 2:严重)
* - lon: 经度坐标
* - lat: 纬度坐标
* - flag: 状态标志
*
* @return bool 操作结果
* @retval true 添加成功
* @retval false 添加失败数据库连接失败或SQL执行错误
*
* @note 调用此函数前需要确保数据库连接正常
* @warning 不会检查数据的有效性,调用者需要自行验证
* @see Injury结构体定义
* @see deleteById()
*
* @example
* @code
* Injury injury;
* injury.id = "001";
* injury.rank = 1;
* injury.lon = 113.045292;
* injury.lat = 28.257748;
* injury.flag = 1;
*
* bool result = databaseManager->add(injury);
* if (result) {
* qDebug() << "伤员记录添加成功";
* } else {
* qDebug() << "伤员记录添加失败";
* }
* @endcode
*/
bool add(const Injury &data);
```
### 3.4 行内注释
```cpp
// 单行注释,解释代码逻辑
int count = 0; // 计数器,记录处理的记录数
// 复杂逻辑需要详细注释
if (m_database.isOpen() && !userName.isEmpty()) {
// 数据库已连接且用户名有效,执行查询
executeQuery(buildSelectQuery(userName));
}
/*
* 多行注释用于解释复杂的逻辑
* 或者描述算法的实现原理
* 也可以用于临时禁用代码块
*/
/**
* TODO: 需要优化查询性能
* FIXME: 修复内存泄漏问题
* HACK: 临时解决方案,需要后续重构
* NOTE: 重要说明或提醒
*/
```
## 4. 代码格式规范
### 4.1 缩进和空格
```cpp
// 使用4个空格缩进不使用Tab
class MyClass
{
public:
void myFunction()
{
if (condition) {
doSomething();
}
// 操作符前后加空格
int result = a + b * c;
bool isValid = (x > 0) && (y < 100);
// 函数调用括号前不加空格,参数间加空格
myFunction(param1, param2);
// 数组访问不加空格
array[index] = value;
// 指针和引用符号靠近类型
QString *pointer;
const QString &reference;
}
};
```
### 4.2 花括号位置
```cpp
// Qt风格花括号另起一行
class MyClass
{
public:
void function()
{
if (condition)
{
// 代码块
}
else
{
// 代码块
}
// 循环语句
for (int i = 0; i < count; ++i)
{
processItem(i);
}
// switch语句
switch (value)
{
case 1:
handleCase1();
break;
case 2:
handleCase2();
break;
default:
handleDefault();
break;
}
}
};
```
### 4.3 行长度和换行
```cpp
// 每行不超过100个字符
// 长函数调用需要换行
connect(ui->pushButton, &QPushButton::clicked,
this, &MyClass::onButtonClicked);
// 长条件语句换行
if (veryLongConditionName && anotherLongConditionName &&
yetAnotherCondition)
{
// 处理逻辑
}
// 函数参数过多时换行
void longFunctionName(const QString &firstParameter,
int secondParameter,
bool thirdParameter,
const QObject *fourthParameter);
```
## 5. Qt特定规范
### 5.1 信号和槽
```cpp
class MyWidget : public QWidget
{
Q_OBJECT
public:
explicit MyWidget(QWidget *parent = nullptr);
signals:
/**
* @brief 数据更新信号
* @param data 更新的数据
*/
void dataUpdated(const QString &data);
/**
* @brief 错误发生信号
* @param errorMessage 错误信息
*/
void errorOccurred(const QString &errorMessage);
public slots:
/**
* @brief 设置数据
* @param data 要设置的数据
*/
void setData(const QString &data);
private slots:
/**
* @brief 按钮点击槽函数
*/
void on_pushButton_clicked();
/**
* @brief 处理网络回复
*/
void handleNetworkReply();
private:
// 建议使用新的连接语法
void setupConnections()
{
connect(ui->pushButton, &QPushButton::clicked,
this, &MyWidget::on_pushButton_clicked);
connect(m_networkManager, &QNetworkAccessManager::finished,
this, &MyWidget::handleNetworkReply);
}
};
```
### 5.2 属性系统
```cpp
class MyClass : public QObject
{
Q_OBJECT
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
public:
// 属性读取器
QString name() const { return m_name; }
int value() const { return m_value; }
// 属性设置器
void setName(const QString &name)
{
if (m_name != name) {
m_name = name;
emit nameChanged();
}
}
void setValue(int value)
{
if (m_value != value) {
m_value = value;
emit valueChanged();
}
}
signals:
void nameChanged();
void valueChanged();
private:
QString m_name;
int m_value = 0;
};
```
### 5.3 Q_OBJECT宏使用
```cpp
// 正确继承自QObject的类需要Q_OBJECT宏
class MyQObjectClass : public QObject
{
Q_OBJECT // 必须在类声明的开始处
public:
explicit MyQObjectClass(QObject *parent = nullptr);
signals:
void somethingHappened();
};
// 纯数据结构不需要Q_OBJECT
struct DataStructure
{
QString id;
int value;
double coordinate;
};
```
## 6. 错误处理和调试
### 6.1 调试输出
```cpp
#include <QDebug>
#include <QLoggingCategory>
// 定义日志分类
Q_LOGGING_CATEGORY(database, "app.database")
Q_LOGGING_CATEGORY(network, "app.network")
void MyClass::processData()
{
qCDebug(database) << "开始处理数据...";
qCDebug(database) << "数据库连接状态:" << m_database.isOpen();
if (!m_database.isOpen()) {
qCWarning(database) << "数据库未连接";
return;
}
// 调试信息输出
qDebug() << "处理记录数量:" << records.size();
qInfo() << "用户操作:" << userAction;
qWarning() << "性能警告: 查询耗时过长";
qCritical() << "严重错误: 数据库连接丢失";
}
```
### 6.2 异常和错误处理
```cpp
bool DatabaseManager::executeQuery(const QString &sql)
{
// 参数验证
if (sql.isEmpty()) {
qWarning() << "SQL语句为空";
return false;
}
if (!m_database.isOpen()) {
qCritical() << "数据库未连接";
return false;
}
try {
QSqlQuery query(m_database);
if (!query.prepare(sql)) {
qCritical() << "SQL预处理失败:" << query.lastError().text();
return false;
}
if (!query.exec()) {
qCritical() << "SQL执行失败:" << query.lastError().text();
qCritical() << "执行的SQL:" << sql;
return false;
}
qDebug() << "SQL执行成功影响行数:" << query.numRowsAffected();
return true;
} catch (const std::exception &e) {
qCritical() << "执行异常:" << e.what();
return false;
}
}
```
### 6.3 断言使用
```cpp
#include <QDebug>
void processArray(const QStringList &list, int index)
{
// 调试版本中检查参数有效性
Q_ASSERT(!list.isEmpty());
Q_ASSERT(index >= 0 && index < list.size());
// 生产版本中的参数检查
if (list.isEmpty()) {
qWarning() << "列表为空";
return;
}
if (index < 0 || index >= list.size()) {
qWarning() << "索引超出范围:" << index;
return;
}
// 处理逻辑
QString item = list.at(index);
// ...
}
```
## 7. 内存管理
### 7.1 智能指针使用
```cpp
#include <QScopedPointer>
#include <QSharedPointer>
#include <memory>
class MyClass
{
private:
// Qt智能指针
QScopedPointer<QTimer> m_timer; // 独占所有权
QSharedPointer<QNetworkReply> m_reply; // 共享所有权
// 标准库智能指针
std::unique_ptr<DatabaseConnection> m_connection;
std::shared_ptr<ConfigManager> m_config;
public:
MyClass()
: m_timer(new QTimer(this)) // 自动删除
, m_connection(std::make_unique<DatabaseConnection>())
{
// 初始化
}
};
```
### 7.2 对象生命周期管理
```cpp
// 使用父子关系管理内存
void createUI()
{
QWidget *mainWidget = new QWidget;
// 子控件会被父控件自动删除
QLabel *label = new QLabel("文本", mainWidget);
QPushButton *button = new QPushButton("按钮", mainWidget);
// 布局也会被父控件管理
QVBoxLayout *layout = new QVBoxLayout(mainWidget);
layout->addWidget(label);
layout->addWidget(button);
}
// 手动管理生命周期
void processData()
{
// 使用栈对象,自动销毁
QSqlQuery query;
// 或使用智能指针
QScopedPointer<QNetworkAccessManager> manager(new QNetworkAccessManager);
// 处理逻辑...
} // 函数结束时自动销毁
```
## 8. 性能优化建议
### 8.1 字符串处理
```cpp
// 优先使用const引用传递字符串
void processString(const QString &str) // 好
{
// 处理逻辑
}
void processString(QString str) // 避免,会产生拷贝
{
// 处理逻辑
}
// 字符串拼接优化
QString buildQuery(const QStringList &fields, const QString &table)
{
// 使用QStringBuilder或预分配容量
QString query;
query.reserve(100); // 预分配空间
query += "SELECT ";
query += fields.join(", ");
query += " FROM ";
query += table;
return query;
}
```
### 8.2 容器使用
```cpp
// 优先使用const引用遍历
void processItems(const QStringList &items)
{
// 使用基于范围的for循环
for (const QString &item : items) {
processItem(item);
}
// 或使用const迭代器
for (auto it = items.cbegin(); it != items.cend(); ++it) {
processItem(*it);
}
}
// 预分配容器大小
QStringList buildList(int expectedSize)
{
QStringList list;
list.reserve(expectedSize); // 避免频繁重新分配
for (int i = 0; i < expectedSize; ++i) {
list.append(QString::number(i));
}
return list;
}
```
## 9. 代码审查检查清单
### 9.1 基本检查
- [ ] 头文件包含保护符正确
- [ ] 包含文件顺序正确(系统 -> 第三方 -> 项目内部)
- [ ] 命名规范符合要求
- [ ] 缩进和格式一致
- [ ] 没有多余的空白行
### 9.2 功能检查
- [ ] 函数功能单一,职责明确
- [ ] 参数验证充分
- [ ] 错误处理完善
- [ ] 内存管理正确
- [ ] 线程安全(如需要)
### 9.3 Qt特定检查
- [ ] Q_OBJECT宏位置正确
- [ ] 信号槽连接使用新语法
- [ ] 父子关系设置正确
- [ ] 元对象系统使用得当
### 9.4 文档检查
- [ ] 公有接口有完整注释
- [ ] 复杂逻辑有行内注释
- [ ] 文件头信息完整
- [ ] 示例代码正确
## 10. 工具推荐
### 10.1 代码格式化工具
- **clang-format**: 自动格式化代码
- **Qt Creator**: 内置代码格式化功能
### 10.2 静态分析工具
- **clang-static-analyzer**: 静态代码分析
- **cppcheck**: C++静态分析工具
- **PVS-Studio**: 商业静态分析工具
### 10.3 文档生成工具
- **Doxygen**: 从注释生成文档
- **qdoc**: Qt官方文档工具
---
**注意事项:**
1. 本规范基于Qt官方编码风格和现代C++最佳实践
2. 团队应该保持一致的编码风格
3. 新项目应该严格遵循这些规范
4. 现有项目可以逐步重构以符合规范
5. 定期进行代码审查以确保规范执行
Loading…
Cancel
Save