- 项目重命名:CasualtySightPlus → BattlefieldExplorationSystem - 清理旧代码:移除injury相关过时功能和备份文件 - 建立模块化结构:src/core、src/ui、include层次化组织 - 更新构建配置:新版本2.0.0,优化编译路径和依赖 - 完善项目文档:更新CLAUDE.md架构说明和开发指南 为后续界面重设计和MySQL集成奠定基础架构。main
parent
9eea3ee5f8
commit
35a3a44b32
@ -0,0 +1,55 @@
|
||||
QT += core gui widgets quickwidgets positioning
|
||||
QT += multimedia multimediawidgets
|
||||
QT += webenginewidgets webchannel
|
||||
QT += sql charts
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
CONFIG += c++17
|
||||
|
||||
# Include paths - 更新为新的目录结构
|
||||
INCLUDEPATH += include
|
||||
INCLUDEPATH += include/core
|
||||
INCLUDEPATH += include/ui
|
||||
INCLUDEPATH += AudioModule
|
||||
|
||||
# Build directories
|
||||
OBJECTS_DIR = build
|
||||
MOC_DIR = build
|
||||
UI_DIR = build
|
||||
RCC_DIR = build
|
||||
|
||||
# Source files - 按模块组织
|
||||
SOURCES += \
|
||||
src/main.cpp \
|
||||
src/qrc_res.cpp \
|
||||
src/core/database/UAVDatabase.cpp \
|
||||
src/core/database/DogDatabase.cpp \
|
||||
src/ui/main/MainWindow.cpp \
|
||||
src/ui/dialogs/DeviceDialog.cpp
|
||||
|
||||
# Header files - 按模块组织
|
||||
HEADERS += \
|
||||
include/core/database/UAVDatabase.h \
|
||||
include/core/database/DogDatabase.h \
|
||||
include/ui/main/MainWindow.h
|
||||
|
||||
# UI forms - 按模块组织
|
||||
FORMS += \
|
||||
forms/main/MainWindow.ui \
|
||||
forms/dialogs/DeviceDialog.ui
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
RESOURCES += \
|
||||
res.qrc
|
||||
|
||||
# Version and metadata
|
||||
VERSION = 2.0.0
|
||||
DEFINES += APP_VERSION=\\\"$$VERSION\\\"
|
||||
TARGET = BattlefieldExplorationSystem
|
||||
|
||||
# 删除了所有injury相关的文件引用
|
@ -0,0 +1,152 @@
|
||||
-- CasualtySightPlus 数据库表结构
|
||||
-- 数据库: Client
|
||||
-- 创建日期: 2025-06-18
|
||||
|
||||
USE Client;
|
||||
|
||||
-- 1. UAV设备表 (无人机)
|
||||
CREATE TABLE IF NOT EXISTS uav_devices (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL DEFAULT 'UAV设备',
|
||||
state INT DEFAULT 0 COMMENT '设备状态: 0=离线, 1=在线, 2=工作中, 3=错误',
|
||||
ip VARCHAR(15),
|
||||
port INT,
|
||||
longitude DOUBLE,
|
||||
latitude DOUBLE,
|
||||
signal_strength INT DEFAULT 0 COMMENT '信号强度 0-100',
|
||||
last_heartbeat TIMESTAMP NULL COMMENT '最后心跳时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_state (state),
|
||||
INDEX idx_location (longitude, latitude)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='无人机设备表';
|
||||
|
||||
-- 2. Dog机器人表 (地面机器人)
|
||||
CREATE TABLE IF NOT EXISTS dog_devices (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
name VARCHAR(100) NOT NULL DEFAULT '地面机器人',
|
||||
state INT DEFAULT 0 COMMENT '设备状态: 0=离线, 1=在线, 2=工作中, 3=错误',
|
||||
ip VARCHAR(15),
|
||||
port INT,
|
||||
longitude DOUBLE,
|
||||
latitude DOUBLE,
|
||||
signal_strength INT DEFAULT 0 COMMENT '信号强度 0-100',
|
||||
last_heartbeat TIMESTAMP NULL COMMENT '最后心跳时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_state (state),
|
||||
INDEX idx_location (longitude, latitude)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='地面机器人设备表';
|
||||
|
||||
-- 3. 伤员记录表
|
||||
CREATE TABLE IF NOT EXISTS injury_records (
|
||||
id VARCHAR(50) PRIMARY KEY,
|
||||
rank INT COMMENT '伤员等级',
|
||||
longitude DOUBLE,
|
||||
latitude DOUBLE,
|
||||
flag INT DEFAULT 1 COMMENT '有效标志: 0=无效, 1=有效',
|
||||
severity INT DEFAULT 0 COMMENT '严重程度: 0=轻微, 1=中等, 2=严重, 3=危重',
|
||||
description TEXT COMMENT '伤情描述',
|
||||
discovered_by VARCHAR(50) COMMENT '发现设备ID',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
INDEX idx_flag (flag),
|
||||
INDEX idx_severity (severity),
|
||||
INDEX idx_location (longitude, latitude)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='伤员记录表';
|
||||
|
||||
-- 4. 系统配置表
|
||||
CREATE TABLE IF NOT EXISTS system_config (
|
||||
config_key VARCHAR(100) PRIMARY KEY,
|
||||
config_value TEXT,
|
||||
config_type VARCHAR(20) DEFAULT 'string' COMMENT '配置类型: string, int, float, boolean, json',
|
||||
description VARCHAR(500),
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统配置表';
|
||||
|
||||
-- 5. 用户会话表
|
||||
CREATE TABLE IF NOT EXISTS user_sessions (
|
||||
session_id VARCHAR(100) PRIMARY KEY,
|
||||
user_name VARCHAR(50),
|
||||
login_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
last_activity TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
ip_address VARCHAR(45),
|
||||
user_agent TEXT,
|
||||
status INT DEFAULT 1 COMMENT '会话状态: 0=已注销, 1=活跃',
|
||||
INDEX idx_user (user_name),
|
||||
INDEX idx_status (status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户会话表';
|
||||
|
||||
-- 6. 设备操作日志表
|
||||
CREATE TABLE IF NOT EXISTS device_operation_logs (
|
||||
log_id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||
device_id VARCHAR(50),
|
||||
device_type VARCHAR(20) COMMENT '设备类型: uav, dog',
|
||||
operation VARCHAR(50) COMMENT '操作类型: connect, disconnect, control, move',
|
||||
operation_result VARCHAR(20) DEFAULT 'success' COMMENT '操作结果: success, failed, timeout',
|
||||
operator VARCHAR(50) COMMENT '操作员',
|
||||
operation_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
details JSON COMMENT '操作详细信息',
|
||||
INDEX idx_device (device_id),
|
||||
INDEX idx_operation_time (operation_time),
|
||||
INDEX idx_device_type (device_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='设备操作日志表';
|
||||
|
||||
-- 插入默认系统配置
|
||||
INSERT INTO system_config (config_key, config_value, config_type, description) VALUES
|
||||
('app.version', '2.0.0', 'string', '应用程序版本'),
|
||||
('app.theme', 'military', 'string', '默认主题'),
|
||||
('database.connection_timeout', '30000', 'int', '数据库连接超时时间(毫秒)'),
|
||||
('ui.auto_refresh_interval', '5000', 'int', '界面自动刷新间隔(毫秒)'),
|
||||
('ui.device_card_style', 'modern', 'string', '设备卡片样式'),
|
||||
('map.default_center_lat', '39.9', 'float', '地图默认中心纬度'),
|
||||
('map.default_center_lon', '116.4', 'float', '地图默认中心经度'),
|
||||
('map.default_zoom', '12', 'int', '地图默认缩放级别'),
|
||||
('device.heartbeat_interval', '10000', 'int', '设备心跳间隔(毫秒)'),
|
||||
('device.connection_timeout', '30000', 'int', '设备连接超时(毫秒)')
|
||||
ON DUPLICATE KEY UPDATE
|
||||
config_value = VALUES(config_value),
|
||||
updated_at = CURRENT_TIMESTAMP;
|
||||
|
||||
-- 为兼容现有代码,创建旧表名的视图
|
||||
CREATE OR REPLACE VIEW uavdatabase AS
|
||||
SELECT
|
||||
id,
|
||||
state,
|
||||
ip,
|
||||
port,
|
||||
longitude as lon,
|
||||
latitude as lat
|
||||
FROM uav_devices;
|
||||
|
||||
CREATE OR REPLACE VIEW dogdatabase AS
|
||||
SELECT
|
||||
id,
|
||||
state,
|
||||
ip,
|
||||
port,
|
||||
longitude as lon,
|
||||
latitude as lat
|
||||
FROM dog_devices;
|
||||
|
||||
CREATE OR REPLACE VIEW injurydatabase AS
|
||||
SELECT
|
||||
id,
|
||||
rank as injuryrank,
|
||||
longitude as lon,
|
||||
latitude as lat,
|
||||
flag
|
||||
FROM injury_records;
|
||||
|
||||
-- 显示创建的表
|
||||
SHOW TABLES;
|
||||
|
||||
-- 显示表结构概要
|
||||
SELECT
|
||||
TABLE_NAME as '表名',
|
||||
TABLE_COMMENT as '说明',
|
||||
TABLE_ROWS as '记录数'
|
||||
FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = 'Client'
|
||||
ORDER BY TABLE_NAME;
|
@ -0,0 +1,486 @@
|
||||
# CasualtySightPlus 项目结构重构规划
|
||||
|
||||
## 当前项目结构分析
|
||||
|
||||
### 现有目录结构
|
||||
```
|
||||
Client/
|
||||
├── include/ # 头文件目录
|
||||
│ ├── DogDatabase.h
|
||||
│ ├── InjuryAnalysisUI.h
|
||||
│ ├── InjuryDatabase.h
|
||||
│ ├── UAVDatabase.h
|
||||
│ ├── guidingui.h
|
||||
│ └── injurydisiplayui.h
|
||||
├── src/ # 源码目录
|
||||
│ ├── DogDatabase.cpp
|
||||
│ ├── InjuryAnalysisUI.cpp
|
||||
│ ├── InjuryDatabase.cpp
|
||||
│ ├── UAVDatabase.cpp
|
||||
│ ├── guidingui.cpp
|
||||
│ ├── injurydisiplayui.cpp
|
||||
│ └── main.cpp
|
||||
├── ui/ # UI表单文件
|
||||
│ ├── InjuryAnalysisUI.ui
|
||||
│ ├── guidingui.ui
|
||||
│ └── injurydisiplayui.ui
|
||||
├── res/ # 资源文件
|
||||
│ ├── html/
|
||||
│ ├── icon/
|
||||
│ ├── image/
|
||||
│ └── qml/
|
||||
├── build/ # 构建目录
|
||||
└── AudioModule/ # 音频模块
|
||||
```
|
||||
|
||||
### 现有数据库架构分析
|
||||
|
||||
#### 1. UAVDatabase (无人机数据库)
|
||||
- **连接方式**: 已使用MySQL (`QMYSQL`)
|
||||
- **表结构**: `uavdatabase` 表
|
||||
- id (VARCHAR)
|
||||
- state (INT)
|
||||
- ip (VARCHAR)
|
||||
- port (INT)
|
||||
- lon (DOUBLE)
|
||||
- lat (DOUBLE)
|
||||
- **连接信息**: 数据库名: `fly_land_database`, 用户: `root`
|
||||
|
||||
#### 2. DogDatabase (地面机器人数据库)
|
||||
- **连接方式**: 已使用MySQL (`QMYSQL`)
|
||||
- **表结构**: `dogdatabase` 表
|
||||
- id (VARCHAR)
|
||||
- state (INT)
|
||||
- ip (VARCHAR)
|
||||
- port (INT)
|
||||
- lon (DOUBLE)
|
||||
- lat (DOUBLE)
|
||||
- **单例模式**: 线程安全实现
|
||||
|
||||
#### 3. InjuryDatabase (伤员信息数据库)
|
||||
- **连接方式**: 已使用MySQL (`QMYSQL`)
|
||||
- **表结构**: `injurydatabase` 表
|
||||
- id (VARCHAR)
|
||||
- injuryrank (INT)
|
||||
- lon (DOUBLE)
|
||||
- lat (DOUBLE)
|
||||
- flag (INT)
|
||||
|
||||
## 重构后的项目结构规划
|
||||
|
||||
### 新的目录结构
|
||||
```
|
||||
Client/
|
||||
├── src/
|
||||
│ ├── core/ # 核心业务逻辑
|
||||
│ │ ├── database/ # 数据库层
|
||||
│ │ │ ├── managers/ # 数据库管理器
|
||||
│ │ │ ├── models/ # 数据模型
|
||||
│ │ │ └── connections/ # 连接管理
|
||||
│ │ ├── services/ # 业务服务层
|
||||
│ │ └── utils/ # 工具类
|
||||
│ ├── ui/ # 用户界面层
|
||||
│ │ ├── main/ # 主界面
|
||||
│ │ ├── components/ # 可复用组件
|
||||
│ │ │ ├── DeviceCard/ # 设备卡片组件
|
||||
│ │ │ ├── StatusPanel/ # 状态面板组件
|
||||
│ │ │ └── MapViewer/ # 地图显示组件
|
||||
│ │ ├── dialogs/ # 对话框
|
||||
│ │ └── widgets/ # 自定义Widget
|
||||
│ ├── resources/ # 资源文件
|
||||
│ │ ├── styles/ # 样式文件
|
||||
│ │ ├── themes/ # 主题配置
|
||||
│ │ ├── images/ # 图片资源
|
||||
│ │ ├── icons/ # 图标资源
|
||||
│ │ ├── qml/ # QML文件
|
||||
│ │ └── html/ # HTML文件
|
||||
│ └── main.cpp
|
||||
├── include/ # 公共头文件
|
||||
├── forms/ # UI表单文件 (.ui)
|
||||
├── build/ # 构建输出目录
|
||||
├── config/ # 配置文件
|
||||
├── docs/ # 项目文档
|
||||
├── tests/ # 测试文件
|
||||
└── scripts/ # 构建脚本
|
||||
```
|
||||
|
||||
### 数据库层重构规划
|
||||
|
||||
#### 1. 连接管理器 (ConnectionManager)
|
||||
```cpp
|
||||
// src/core/database/connections/ConnectionManager.h
|
||||
class ConnectionManager {
|
||||
public:
|
||||
static ConnectionManager* getInstance();
|
||||
QSqlDatabase getConnection(const QString& connectionName = "default");
|
||||
bool initialize(const DatabaseConfig& config);
|
||||
void cleanup();
|
||||
|
||||
private:
|
||||
QMap<QString, QSqlDatabase> m_connections;
|
||||
DatabaseConfig m_config;
|
||||
};
|
||||
```
|
||||
|
||||
#### 2. 数据库配置管理
|
||||
```cpp
|
||||
// src/core/database/DatabaseConfig.h
|
||||
struct DatabaseConfig {
|
||||
QString host = "localhost";
|
||||
int port = 3306;
|
||||
QString database = "fly_land_database";
|
||||
QString username = "root";
|
||||
QString password;
|
||||
int maxConnections = 10;
|
||||
int connectionTimeout = 30000;
|
||||
};
|
||||
```
|
||||
|
||||
#### 3. 基础数据访问对象 (BaseDAO)
|
||||
```cpp
|
||||
// src/core/database/BaseDAO.h
|
||||
template<typename T>
|
||||
class BaseDAO {
|
||||
public:
|
||||
virtual bool insert(const T& entity) = 0;
|
||||
virtual bool update(const T& entity) = 0;
|
||||
virtual bool deleteById(const QString& id) = 0;
|
||||
virtual T findById(const QString& id) = 0;
|
||||
virtual QList<T> findAll() = 0;
|
||||
virtual QList<T> findByCondition(const QString& condition) = 0;
|
||||
|
||||
protected:
|
||||
QSqlDatabase getDatabase();
|
||||
bool executeQuery(const QString& sql, const QVariantList& params = {});
|
||||
};
|
||||
```
|
||||
|
||||
#### 4. 改进的数据模型
|
||||
```cpp
|
||||
// src/core/database/models/UAVModel.h
|
||||
struct UAVModel {
|
||||
QString id;
|
||||
QString name;
|
||||
int state;
|
||||
QString ip;
|
||||
int port;
|
||||
double longitude;
|
||||
double latitude;
|
||||
int signalStrength;
|
||||
QDateTime lastHeartbeat;
|
||||
QDateTime createdAt;
|
||||
QDateTime updatedAt;
|
||||
|
||||
// 序列化支持
|
||||
QJsonObject toJson() const;
|
||||
static UAVModel fromJson(const QJsonObject& json);
|
||||
};
|
||||
```
|
||||
|
||||
### UI组件重构规划
|
||||
|
||||
#### 1. 设备卡片组件 (DeviceCard)
|
||||
```cpp
|
||||
// src/ui/components/DeviceCard/DeviceCard.h
|
||||
class DeviceCard : public QWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit DeviceCard(QWidget* parent = nullptr);
|
||||
void setDevice(const DeviceInfo& device);
|
||||
void updateStatus(DeviceStatus status);
|
||||
void setCardStyle(CardStyle style);
|
||||
|
||||
signals:
|
||||
void deviceSelected(const QString& deviceId);
|
||||
void controlRequested(const QString& deviceId);
|
||||
void locationRequested(const QString& deviceId);
|
||||
|
||||
private:
|
||||
void setupUI();
|
||||
void updateStatusIndicator();
|
||||
void applyCardStyle();
|
||||
|
||||
private:
|
||||
DeviceInfo m_device;
|
||||
QLabel* m_nameLabel;
|
||||
QLabel* m_statusLabel;
|
||||
QLabel* m_ipLabel;
|
||||
QLabel* m_locationLabel;
|
||||
QProgressBar* m_signalBar;
|
||||
QPushButton* m_detailsBtn;
|
||||
QPushButton* m_controlBtn;
|
||||
QPushButton* m_locateBtn;
|
||||
};
|
||||
```
|
||||
|
||||
#### 2. 状态面板组件 (StatusPanel)
|
||||
```cpp
|
||||
// src/ui/components/StatusPanel/StatusPanel.h
|
||||
class StatusPanel : public QWidget {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit StatusPanel(QWidget* parent = nullptr);
|
||||
void addStatusItem(const QString& name, const QVariant& value);
|
||||
void updateStatusItem(const QString& name, const QVariant& value);
|
||||
void setUpdateInterval(int msec);
|
||||
|
||||
private slots:
|
||||
void refreshStatus();
|
||||
|
||||
private:
|
||||
QTimer* m_refreshTimer;
|
||||
QMap<QString, QLabel*> m_statusLabels;
|
||||
QVBoxLayout* m_layout;
|
||||
};
|
||||
```
|
||||
|
||||
#### 3. 主界面重构 (MainWindow)
|
||||
```cpp
|
||||
// src/ui/main/MainWindow.h
|
||||
class MainWindow : public QMainWindow {
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit MainWindow(QWidget* parent = nullptr);
|
||||
|
||||
private slots:
|
||||
void onDeviceSelected(const QString& deviceId);
|
||||
void onStatusChanged(const QString& deviceId, DeviceStatus status);
|
||||
void refreshDeviceList();
|
||||
|
||||
private:
|
||||
void setupUI();
|
||||
void setupMenus();
|
||||
void setupStatusBar();
|
||||
void setupDockWidgets();
|
||||
void connectSignals();
|
||||
|
||||
private:
|
||||
DeviceListWidget* m_deviceList;
|
||||
MapViewerWidget* m_mapViewer;
|
||||
StatusPanel* m_statusPanel;
|
||||
QDockWidget* m_deviceDock;
|
||||
QDockWidget* m_statusDock;
|
||||
};
|
||||
```
|
||||
|
||||
### 样式系统规划
|
||||
|
||||
#### 1. 主题管理器 (ThemeManager)
|
||||
```cpp
|
||||
// src/core/ui/ThemeManager.h
|
||||
class ThemeManager : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum Theme { Light, Dark, Military };
|
||||
|
||||
static ThemeManager* getInstance();
|
||||
void setTheme(Theme theme);
|
||||
Theme currentTheme() const;
|
||||
QString getStyleSheet(const QString& component) const;
|
||||
|
||||
signals:
|
||||
void themeChanged(Theme theme);
|
||||
|
||||
private:
|
||||
void loadTheme(Theme theme);
|
||||
QMap<QString, QString> m_styleSheets;
|
||||
Theme m_currentTheme;
|
||||
};
|
||||
```
|
||||
|
||||
#### 2. 样式配置文件结构
|
||||
```
|
||||
src/resources/styles/
|
||||
├── themes/
|
||||
│ ├── dark.qss # 深色主题
|
||||
│ ├── light.qss # 浅色主题
|
||||
│ └── military.qss # 军事主题
|
||||
├── components/
|
||||
│ ├── device_card.qss # 设备卡片样式
|
||||
│ ├── status_panel.qss # 状态面板样式
|
||||
│ ├── main_window.qss # 主窗口样式
|
||||
│ └── buttons.qss # 按钮样式
|
||||
└── common/
|
||||
├── colors.qss # 颜色定义
|
||||
├── fonts.qss # 字体定义
|
||||
└── animations.qss # 动画效果
|
||||
```
|
||||
|
||||
## 配置文件管理
|
||||
|
||||
### 1. 应用配置 (AppConfig)
|
||||
```json
|
||||
// config/app.json
|
||||
{
|
||||
"application": {
|
||||
"name": "CasualtySightPlus",
|
||||
"version": "2.0.0",
|
||||
"theme": "military",
|
||||
"language": "zh_CN"
|
||||
},
|
||||
"database": {
|
||||
"host": "localhost",
|
||||
"port": 3306,
|
||||
"name": "fly_land_database",
|
||||
"username": "root",
|
||||
"pool_size": 10,
|
||||
"connection_timeout": 30000
|
||||
},
|
||||
"ui": {
|
||||
"window_size": [1400, 900],
|
||||
"device_card_style": "modern",
|
||||
"auto_refresh_interval": 5000,
|
||||
"animation_enabled": true
|
||||
},
|
||||
"map": {
|
||||
"default_center": [39.9, 116.4],
|
||||
"default_zoom": 12,
|
||||
"tile_server": "amap"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 设备模板配置
|
||||
```json
|
||||
// config/device_templates.json
|
||||
{
|
||||
"uav_templates": [
|
||||
{
|
||||
"name": "侦察机模板",
|
||||
"type": "reconnaissance",
|
||||
"default_settings": {
|
||||
"max_altitude": 500,
|
||||
"max_speed": 50,
|
||||
"camera_resolution": "1080p"
|
||||
}
|
||||
}
|
||||
],
|
||||
"robot_templates": [
|
||||
{
|
||||
"name": "巡逻机器人模板",
|
||||
"type": "patrol",
|
||||
"default_settings": {
|
||||
"max_speed": 5,
|
||||
"sensor_range": 50,
|
||||
"battery_capacity": 8000
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 构建系统改进
|
||||
|
||||
### 1. 更新的 .pro 文件结构
|
||||
```pro
|
||||
# CasualtySightPlus.pro
|
||||
QT += core gui widgets quickwidgets positioning
|
||||
QT += multimedia multimediawidgets
|
||||
QT += webenginewidgets webchannel
|
||||
QT += sql charts network
|
||||
|
||||
CONFIG += c++17
|
||||
|
||||
# 版本信息
|
||||
VERSION = 2.0.0
|
||||
DEFINES += APP_VERSION=\\\"$$VERSION\\\"
|
||||
|
||||
# 包含路径
|
||||
INCLUDEPATH += \
|
||||
include \
|
||||
src/core \
|
||||
src/ui \
|
||||
AudioModule
|
||||
|
||||
# 构建目录
|
||||
OBJECTS_DIR = build/obj
|
||||
MOC_DIR = build/moc
|
||||
UI_DIR = build/ui
|
||||
RCC_DIR = build/rcc
|
||||
DESTDIR = build/bin
|
||||
|
||||
# 预编译头文件
|
||||
PRECOMPILED_HEADER = src/core/pch.h
|
||||
|
||||
# 源文件组织
|
||||
include(src/core/core.pri)
|
||||
include(src/ui/ui.pri)
|
||||
include(AudioModule/audio.pri)
|
||||
|
||||
# 资源文件
|
||||
RESOURCES += \
|
||||
resources/resources.qrc \
|
||||
resources/styles/styles.qrc \
|
||||
resources/themes/themes.qrc
|
||||
|
||||
# 安装规则
|
||||
target.path = /opt/CasualtySightPlus/bin
|
||||
config.files = config/*
|
||||
config.path = /opt/CasualtySightPlus/config
|
||||
INSTALLS += target config
|
||||
```
|
||||
|
||||
### 2. 模块化 .pri 文件
|
||||
```pro
|
||||
# src/core/core.pri
|
||||
HEADERS += \
|
||||
$$PWD/database/ConnectionManager.h \
|
||||
$$PWD/database/BaseDAO.h \
|
||||
$$PWD/database/models/UAVModel.h \
|
||||
$$PWD/database/models/DogModel.h \
|
||||
$$PWD/database/models/InjuryModel.h \
|
||||
$$PWD/services/DeviceService.h \
|
||||
$$PWD/utils/Logger.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/database/ConnectionManager.cpp \
|
||||
$$PWD/database/BaseDAO.cpp \
|
||||
$$PWD/database/models/UAVModel.cpp \
|
||||
$$PWD/database/models/DogModel.cpp \
|
||||
$$PWD/database/models/InjuryModel.cpp \
|
||||
$$PWD/services/DeviceService.cpp \
|
||||
$$PWD/utils/Logger.cpp
|
||||
```
|
||||
|
||||
## 迁移策略
|
||||
|
||||
### 阶段1: 准备工作
|
||||
1. 创建新的目录结构
|
||||
2. 设置构建环境
|
||||
3. 创建基础框架类
|
||||
|
||||
### 阶段2: 数据库层迁移
|
||||
1. 实现新的数据库连接管理
|
||||
2. 迁移现有数据模型
|
||||
3. 创建改进的DAO类
|
||||
4. 测试数据库操作
|
||||
|
||||
### 阶段3: UI组件重构
|
||||
1. 创建新的设备卡片组件
|
||||
2. 重构主界面布局
|
||||
3. 实现样式主题系统
|
||||
4. 迁移现有功能
|
||||
|
||||
### 阶段4: 集成和测试
|
||||
1. 集成所有模块
|
||||
2. 全面功能测试
|
||||
3. 性能优化
|
||||
4. 文档更新
|
||||
|
||||
## 风险评估
|
||||
|
||||
### 技术风险
|
||||
- **数据库迁移风险**: 中等 - 现有数据库结构已经使用MySQL
|
||||
- **UI兼容性风险**: 低 - 使用标准Qt组件
|
||||
- **性能风险**: 低 - 改进的架构应该提升性能
|
||||
|
||||
### 时间风险
|
||||
- **开发周期**: 预计4-5周
|
||||
- **测试时间**: 额外1周
|
||||
- **文档编写**: 额外几天
|
||||
|
||||
### 缓解策略
|
||||
1. 分阶段实施,确保每个阶段都有可工作的版本
|
||||
2. 保持现有数据库结构兼容性
|
||||
3. 充分的单元测试和集成测试
|
||||
4. 详细的代码审查和文档
|
@ -1,101 +0,0 @@
|
||||
#ifndef INJURYDATABASE_H
|
||||
#define INJURYDATABASE_H
|
||||
|
||||
#include <QtSql>
|
||||
#include <QSqlDatabase>
|
||||
#include <QWidget>
|
||||
#include <QSqlQuery>
|
||||
#include <QString>
|
||||
#include <QSqlRecord>
|
||||
#include <QDebug>
|
||||
#include <QSqlError>
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
||||
struct Injury
|
||||
{
|
||||
QString id;
|
||||
int rank;
|
||||
double lon;
|
||||
double lat;
|
||||
int flag;
|
||||
};
|
||||
|
||||
class InjuryDatabase
|
||||
{
|
||||
// Q_OBJECT宏用于提供Qt信号槽和元对象系统服务
|
||||
// 它必须限定为私有访问权限
|
||||
//Q_OBJECT
|
||||
|
||||
public:
|
||||
static InjuryDatabase *getInstance();
|
||||
InjuryDatabase();
|
||||
~InjuryDatabase();
|
||||
|
||||
//打开
|
||||
bool open(const QString &dbName,const QString &userName = QString(),const QString &passwd = QString());
|
||||
//添加数据记录
|
||||
bool add(const Injury &data);
|
||||
//查询所有数据
|
||||
bool select_all(QList<Injury> &result);
|
||||
//删除伤员记录
|
||||
bool deleteById(const QString &id);
|
||||
|
||||
Injury data;
|
||||
//返回有效信息
|
||||
void ReturnInfo(QList<Injury> data);
|
||||
|
||||
|
||||
private:
|
||||
//查询有效数据
|
||||
bool select_valid(const QString &tableName,QList<Injury> &result);
|
||||
//关闭
|
||||
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 // INJURYDATABASE_H
|
@ -1,27 +0,0 @@
|
||||
#ifndef INJURYDISIPLAYUI_H
|
||||
#define INJURYDISIPLAYUI_H
|
||||
|
||||
#include <QDialog>
|
||||
#include <QWebEngineView>
|
||||
#include <QtWebChannel>
|
||||
|
||||
namespace Ui {
|
||||
class InjuryDisiplayUI;
|
||||
}
|
||||
|
||||
class InjuryDisiplayUI : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit InjuryDisiplayUI(QWidget *parent = nullptr);
|
||||
~InjuryDisiplayUI();
|
||||
|
||||
private:
|
||||
Ui::InjuryDisiplayUI *ui;
|
||||
|
||||
// 加载所有伤员标记到地图上
|
||||
void loadInjuryMarkers(QWebEngineView *view);
|
||||
};
|
||||
|
||||
#endif // INJURYDISIPLAYUI_H
|
After Width: | Height: | Size: 40 KiB |
@ -1,120 +0,0 @@
|
||||
/****************************************************************************
|
||||
** Meta object code from reading C++ file 'InjuryAnalysisUI.h'
|
||||
**
|
||||
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.13)
|
||||
**
|
||||
** WARNING! All changes made in this file will be lost!
|
||||
*****************************************************************************/
|
||||
|
||||
#include <memory>
|
||||
#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.13. 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[42];
|
||||
};
|
||||
#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, 23), // "on_searchButton_clicked"
|
||||
QT_MOC_LITERAL(2, 41, 0) // ""
|
||||
|
||||
},
|
||||
"InjuryAnalysisUI\0on_searchButton_clicked\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->on_searchButton_clicked(); 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
|
@ -1,95 +0,0 @@
|
||||
/****************************************************************************
|
||||
** Meta object code from reading C++ file 'injurydisiplayui.h'
|
||||
**
|
||||
** Created by: The Qt Meta Object Compiler version 67 (Qt 5.15.13)
|
||||
**
|
||||
** WARNING! All changes made in this file will be lost!
|
||||
*****************************************************************************/
|
||||
|
||||
#include <memory>
|
||||
#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.13. 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
|
@ -1,13 +1,13 @@
|
||||
/**
|
||||
* @file guidingui.cpp
|
||||
* @file MainWindow.cpp
|
||||
* @brief 战场探索系统主控制界面实现
|
||||
* @author CasualtySightPlus Team
|
||||
* @date 2024-01-01
|
||||
* @version 1.0
|
||||
* @version 2.0
|
||||
*/
|
||||
|
||||
#include "guidingui.h"
|
||||
#include "ui_guidingui.h"
|
||||
#include "ui/main/MainWindow.h"
|
||||
#include "ui_MainWindow.h"
|
||||
|
||||
// Qt GUI头文件
|
||||
#include <QWebEngineView>
|
@ -1,236 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>InjuryAnalysisUI</class>
|
||||
<widget class="QWidget" name="InjuryAnalysisUI">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>679</width>
|
||||
<height>410</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">background-color: rgb(245, 245, 245);
|
||||
font: 11pt "Microsoft YaHei UI";</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>0</y>
|
||||
<width>215</width>
|
||||
<height>82</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_7">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>100</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
<height>80</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>100</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">border-image: url(:/image/res/image/logo_backgroundless.png);</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>伤情结果统计:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="AnalysisDialog" native="true">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>80</y>
|
||||
<width>631</width>
|
||||
<height>291</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QPushButton {
|
||||
background-color: rgba(15, 28, 34, 0);
|
||||
color: rgb(0, 0, 0);
|
||||
|
||||
border: none;
|
||||
|
||||
padding: 10px 20px; /* 设置内边距 */
|
||||
|
||||
border-radius: 5px; /* 设置按钮圆角 */
|
||||
|
||||
font-size: 14px; /* 设置文字大小 */
|
||||
|
||||
text-align: right; /* 设置字体向右对齐 */
|
||||
|
||||
}
|
||||
|
||||
QPushButton:hover {
|
||||
|
||||
background-color: #0364FF; /* 设置鼠标悬停时按钮背景色 */
|
||||
|
||||
}
|
||||
|
||||
QPushButton:pressed {
|
||||
|
||||
background-color: #398439; /* 设置按钮被按下时背景色 */
|
||||
|
||||
}</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||
<item>
|
||||
<widget class="QScrollArea" name="scrollArea">
|
||||
<property name="widgetResizable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>365</width>
|
||||
<height>229</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="text">
|
||||
<string>伤员总数:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="sumLabel">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>伤情轻微的伤员数:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="rank0Label">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>伤情一般的伤员数:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="rank1Label">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>伤情严重的伤员数:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="rank2Label">
|
||||
<property name="text">
|
||||
<string>TextLabel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_6">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>输入伤员编号查询伤员信息</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="searchInput">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="searchButton">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">font: 14pt "Consolas";</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>查询</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -1,19 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>InjuryDisiplayUI</class>
|
||||
<widget class="QDialog" name="InjuryDisiplayUI">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1205</width>
|
||||
<height>710</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
Loading…
Reference in new issue