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,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,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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
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
|
Binary file not shown.
@ -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
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -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 '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.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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, "智能导航", "智能导航功能正在开发中,暂时无法使用");
|
||||
}
|
Loading…
Reference in new issue