Files
flyLink/skylink_qt_station/src/MainWindow.h
2026-01-21 13:44:29 +08:00

128 lines
3.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @file MainWindow.h
* @brief SkyLink Qt 地面站 - 主窗口头文件
*
* 用户界面入口负责显示实时视频、GPS 位置、统计信息等。
*
* @author flowzl
* @date 2026-01-19
*/
#pragma once
#include <QMainWindow>
#include <QLabel>
#include <QPushButton>
#include <QTcpSocket>
#include <QUdpSocket>
#include <QTimer>
#include <QImage>
#include "DeviceInfo.h"
#include "DeviceInfoReceiver.h"
#include <memory>
class GroundReceiver;
class DataLogger;
/**
* @class MainWindow
* @brief 主窗口类
*/
class MainWindow : public QMainWindow {
Q_OBJECT
public:
/**
* @brief 构造函数
* @param parent 父窗口指针
*/
explicit MainWindow(QWidget* parent = nullptr);
/**
* @brief 析构函数
*/
~MainWindow();
private slots:
/**
* @brief 处理接收到的完整帧
*/
void on_frame_received(const QImage& img, double lat, double lon, double alt);
/**
* @brief 处理统计信息更新
*/
void on_stats_updated(int fps, int kbs);
/**
* @brief 保存当前帧按钮点击
*/
void on_save_frame_clicked();
/**
* @brief 启动/停止录制按钮点击
*/
void on_record_toggled(bool checked);
/**
* @brief 设置按钮点击
*/
void on_settings_clicked();
/**
* @brief 收到设备信息
*/
void on_device_info_received(const DeviceInfo& info);
private:
// ========================================================================
// UI 组件
// ========================================================================
QLabel* video_label_; ///< 视频显示标签
QLabel* stats_label_; ///< 统计信息标签
QLabel* gps_label_; ///< GPS 信息标签
QLabel* device_info_label_; ///< 设备信息标签
QPushButton* save_frame_btn_; ///< 保存帧按钮
QPushButton* record_btn_; ///< 录制按钮
QPushButton* settings_btn_; ///< 设置按钮
// ========================================================================
// 业务逻辑对象
// ========================================================================
std::shared_ptr<GroundReceiver> receiver_; ///< UDP 接收器
std::shared_ptr<DeviceInfoReceiver> device_info_receiver_; ///< 设备信息接收器
std::shared_ptr<DataLogger> logger_; ///< 数据记录器
// ========================================================================
// 状态变量
// ========================================================================
QImage current_image_; ///< 当前显示的图像
double current_lat_ = 0.0; ///< 当前纬度
double current_lon_ = 0.0; ///< 当前经度
double current_alt_ = 0.0; ///< 当前海拔
bool is_recording_ = false; ///< 是否正在录制
// ========================================================================
// 初始化函数
// ========================================================================
/**
* @brief 初始化 UI
*/
void init_ui();
/**
* @brief 初始化连接
*/
void init_connections();
/**
* @brief 创建菜单栏
*/
void create_menus();
};