diff --git a/PayloadAPP.pro.user.ed0dad3 b/PayloadAPP.pro.user.ed0dad3 new file mode 100644 index 0000000..68acc19 --- /dev/null +++ b/PayloadAPP.pro.user.ed0dad3 @@ -0,0 +1,273 @@ + + + + + + EnvironmentId + {ed0dad32-f81f-4133-8ec2-4a3277169847} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + 0 + false + true + false + 0 + true + true + 0 + 8 + true + false + 1 + true + true + true + *.md, *.MD, Makefile + false + true + true + + + + ProjectExplorer.Project.PluginSettings + + + true + false + true + true + true + true + + false + + + 0 + true + + true + true + Builtin.DefaultTidyAndClazy + 10 + true + + + + true + + + true + + + + + ProjectExplorer.Project.Target.0 + + Desktop + Desktop Qt 6.6.3 MSVC2019 64bit + Desktop Qt 6.6.3 MSVC2019 64bit + qt.qt6.663.win64_msvc2019_64_kit + 0 + 0 + 0 + + 0 + D:\WorkData\Code\PlayLoad\build\build-PayloadAPP-Desktop_Qt_6_6_3_MSVC2019_64bit-Debug + D:/WorkData/Code/PlayLoad/build/build-PayloadAPP-Desktop_Qt_6_6_3_MSVC2019_64bit-Debug + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Debug + Qt4ProjectManager.Qt4BuildConfiguration + 2 + + + D:\WorkData\Code\PlayLoad\build\release + D:/WorkData/Code/PlayLoad/build/release + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Release + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + + + 0 + D:\WorkData\Code\build-PayloadAPP-Desktop_Qt_6_6_3_MSVC2019_64bit-Profile + D:/WorkData/Code/build-PayloadAPP-Desktop_Qt_6_6_3_MSVC2019_64bit-Profile + + + true + QtProjectManager.QMakeBuildStep + false + + + + true + Qt4ProjectManager.MakeStep + + 2 + 构建 + 构建 + ProjectExplorer.BuildSteps.Build + + + + true + Qt4ProjectManager.MakeStep + clean + + 1 + 清除 + 清除 + ProjectExplorer.BuildSteps.Clean + + 2 + false + + false + + Profile + Qt4ProjectManager.Qt4BuildConfiguration + 0 + 0 + 0 + + 3 + + + 0 + 部署 + 部署 + ProjectExplorer.BuildSteps.Deploy + + 1 + + false + ProjectExplorer.DefaultDeployConfiguration + + 1 + + true + true + 0 + true + + 2 + + false + -e cpu-cycles --call-graph "dwarf,4096" -F 250 + + Qt4ProjectManager.Qt4RunConfiguration:D:/WorkData/Code/PlayLoad/PayloadAPP.pro + D:/WorkData/Code/PlayLoad/PayloadAPP.pro + false + true + true + true + D:/WorkData/Code/PlayLoad/build/build-PayloadAPP-Desktop_Qt_6_6_3_MSVC2019_64bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/Src/GDDC/GDDC.pri b/Src/GDDC/GDDC.pri index e1f1fa2..4c70390 100644 --- a/Src/GDDC/GDDC.pri +++ b/Src/GDDC/GDDC.pri @@ -18,3 +18,6 @@ FORMS += \ $$PWD/gddcSet.ui \ $$PWD/gddcStateInfo.ui \ + +RESOURCES += \ + $$PWD/res.qrc diff --git a/Src/GDDC/Pod/Center.png b/Src/GDDC/Pod/Center.png new file mode 100644 index 0000000..bc47abe Binary files /dev/null and b/Src/GDDC/Pod/Center.png differ diff --git a/Src/GDDC/Pod/c.png b/Src/GDDC/Pod/c.png new file mode 100644 index 0000000..a554398 Binary files /dev/null and b/Src/GDDC/Pod/c.png differ diff --git a/Src/GDDC/Pod/circle.png b/Src/GDDC/Pod/circle.png new file mode 100644 index 0000000..06f5c53 Binary files /dev/null and b/Src/GDDC/Pod/circle.png differ diff --git a/Src/GDDC/Pod/plus.png b/Src/GDDC/Pod/plus.png new file mode 100644 index 0000000..4bd116a Binary files /dev/null and b/Src/GDDC/Pod/plus.png differ diff --git a/Src/GDDC/Pod/podDown.png b/Src/GDDC/Pod/podDown.png new file mode 100644 index 0000000..b919ce2 Binary files /dev/null and b/Src/GDDC/Pod/podDown.png differ diff --git a/Src/GDDC/Pod/podLeft.png b/Src/GDDC/Pod/podLeft.png new file mode 100644 index 0000000..960f52c Binary files /dev/null and b/Src/GDDC/Pod/podLeft.png differ diff --git a/Src/GDDC/Pod/podRight.png b/Src/GDDC/Pod/podRight.png new file mode 100644 index 0000000..111946a Binary files /dev/null and b/Src/GDDC/Pod/podRight.png differ diff --git a/Src/GDDC/Pod/podUp.png b/Src/GDDC/Pod/podUp.png new file mode 100644 index 0000000..f207e67 Binary files /dev/null and b/Src/GDDC/Pod/podUp.png differ diff --git a/Src/GDDC/Pod/sub.png b/Src/GDDC/Pod/sub.png new file mode 100644 index 0000000..927ae7e Binary files /dev/null and b/Src/GDDC/Pod/sub.png differ diff --git a/Src/GDDC/gddcCmdDlg.cpp b/Src/GDDC/gddcCmdDlg.cpp index a106a15..13d0484 100644 --- a/Src/GDDC/gddcCmdDlg.cpp +++ b/Src/GDDC/gddcCmdDlg.cpp @@ -1,5 +1,6 @@ #include "gddcCmdDlg.h" #include "ui_gddcCmdDlg.h" +#include GDDCCmdDlg::GDDCCmdDlg(QWidget *parent) : QWidget(parent), ui(new Ui::GDDCCmdDlg) { @@ -107,6 +108,10 @@ void GDDCCmdDlg::initParam() { ui->lineEdit_6_1->setText("960"); ui->lineEdit_6_2->setText("540"); detectionAreaSetting = false; + + ui->spinBox->setWrapping(true); + ui->spinBox->setValue(5); + setPodIco(); } // 设置tabwidget的几何位置 void GDDCCmdDlg::setTabWidgetGeometry(int ax, int ay, int aw, int ah) { @@ -337,27 +342,31 @@ void GDDCCmdDlg::on_pushButton_3_3_released() { clearTJDCCmdBuffer(); } void GDDCCmdDlg::on_pushButton_3_4_pressed() { TJDCCmdBuffer[0] = (std::byte)0x45; TJDCCmdBuffer[1] = (std::byte)0x01; + TJDCCmdBuffer[2] = (std::byte)ui->spinBox->value(); } void GDDCCmdDlg::on_pushButton_3_4_released() { clearTJDCCmdBuffer(); TJDCCmdBuffer[0] = (std::byte)0x45; TJDCCmdBuffer[1] = (std::byte)0x00; + sendCurDate(TJDCCmdBuffer, 1); } // 变倍- void GDDCCmdDlg::on_pushButton_3_5_pressed() { TJDCCmdBuffer[0] = (std::byte)0x45; TJDCCmdBuffer[1] = (std::byte)0x02; + TJDCCmdBuffer[2] = (std::byte)ui->spinBox->value(); } void GDDCCmdDlg::on_pushButton_3_5_released() { clearTJDCCmdBuffer(); TJDCCmdBuffer[0] = (std::byte)0x45; TJDCCmdBuffer[1] = (std::byte)0x00; + sendCurDate(TJDCCmdBuffer, 1); } // 可见光镜头初始化 void GDDCCmdDlg::on_pushButton_3_6_pressed() { - TJDCCmdBuffer[0] = (std::byte)0x41; + TJDCCmdBuffer[0] = (std::byte)0x40; TJDCCmdBuffer[1] = (std::byte)0x03; } void GDDCCmdDlg::on_pushButton_3_6_released() { clearTJDCCmdBuffer(); } @@ -380,12 +389,16 @@ void GDDCCmdDlg::on_pushButton_3_8_released() { clearTJDCCmdBuffer(); } // 低照度模式 void GDDCCmdDlg::on_pushButton_3_9_pressed() { - if (param_pushButton_3_9) { - TJDCCmdBuffer[0] = (std::byte)0x4A; + if (param_pushButton_3_9) {//关闭 + TJDCCmdBuffer[0] = (std::byte)0x4B; TJDCCmdBuffer[1] = (std::byte)0x00; - } else { - TJDCCmdBuffer[0] = (std::byte)0x4A; + param_pushButton_3_9 = false; + ui->pushButton_3_9->setText("低照度模式"); + } else { //开启 + TJDCCmdBuffer[0] = (std::byte)0x4B; TJDCCmdBuffer[1] = (std::byte)0x01; + param_pushButton_3_9 = true; + ui->pushButton_3_9->setText("低照度模式关"); } } void GDDCCmdDlg::on_pushButton_3_9_released() { clearTJDCCmdBuffer(); } @@ -646,7 +659,7 @@ void GDDCCmdDlg::on_pushButton_4_17_pressed() { TJDCCmdBuffer[1] = (std::byte)0x00; TJDCCmdBuffer[2] = (std::byte)0x00; } else { - TJDCCmdBuffer[0] = (std::byte)0x58; + TJDCCmdBuffer[0] = (std::byte)0x53; TJDCCmdBuffer[1] = (std::byte)0x01; TJDCCmdBuffer[2] = (std::byte)(sel - 1); } @@ -870,13 +883,13 @@ void GDDCCmdDlg::on_pushButton_5_15_released() { clearTJDCCmdBuffer(); } // 框架 void GDDCCmdDlg::on_radioButton_5_1_clicked() { paramIsFrame = true; - ui->pushButton_5_5->setText("归中"); + // ui->pushButton_5_5->setText("归中"); } // 陀螺 void GDDCCmdDlg::on_radioButton_5_2_clicked() { paramIsFrame = false; - ui->pushButton_5_5->setText("自动校准"); + // ui->pushButton_5_5->setText("自动校准"); } // AI开 @@ -956,3 +969,59 @@ void GDDCCmdDlg::on_pushButton_6_8_clicked() { ui->pushButton_6_8->setDown(false); } } + +void GDDCCmdDlg::wheelSwipe(int value) +{ + if(value > 0)//鼠标前滚 + { + on_pushButton_3_4_pressed(); + } + else if(value < 0) + { + on_pushButton_3_5_pressed(); + } + else if(value == 0) + { + on_pushButton_3_4_released(); + } + //qDebug() << value; +} + +void GDDCCmdDlg::setMoveParm(QPointF size) +{ + int x = std::clamp(static_cast(size.x()/10), -60, 60); + int y = std::clamp(static_cast(- size.y()/10), -60, 60); + // qDebug() << "缩减之后的屏幕滑动参数==>" << "x:" << x << "y:" << y; + TJDCCmdBuffer[5] = (std::byte)0x70; + TJDCCmdBuffer[6] = (std::byte)(x & 0xFF); + TJDCCmdBuffer[7] = (std::byte)((x >> 8) & 0xFF); + TJDCCmdBuffer[8] = (std::byte)(y & 0xFF); + TJDCCmdBuffer[9] = (std::byte)((y >> 8) & 0xFF); + //qDebug() << (int)TJDCCmdBuffer[6] << "---" << (int)TJDCCmdBuffer[7]; +} + +/************************************************* + * @func + * @brief 设置调查控制页面图标 + **************************************************/ +void GDDCCmdDlg::setPodIco() { + ui->pushButton_5_1->setIcon(QIcon(":/img/Pod/podUp.png")); + ui->pushButton_5_1->setIconSize(QSize(53, 53)); + ui->pushButton_5_1->setStyleSheet("QPushButton { border: none; }"); + + ui->pushButton_5_2->setIcon(QIcon(":/img/Pod/podLeft.png")); + ui->pushButton_5_2->setIconSize(QSize(53, 53)); + ui->pushButton_5_2->setStyleSheet("QPushButton { border: none; }"); + + ui->pushButton_5_3->setIcon(QIcon(":/img/Pod/podDown.png")); + ui->pushButton_5_3->setIconSize(QSize(53, 53)); + ui->pushButton_5_3->setStyleSheet("QPushButton { border: none; }"); + + ui->pushButton_5_4->setIcon(QIcon(":/img/Pod/podRight.png")); + ui->pushButton_5_4->setIconSize(QSize(53, 53)); + ui->pushButton_5_4->setStyleSheet("QPushButton { border: none; }"); + + ui->pushButton_5_5->setIcon(QIcon(":/img/Pod/Center.png")); + ui->pushButton_5_5->setIconSize(QSize(53, 53)); + ui->pushButton_5_5->setStyleSheet("QPushButton { border: none; }"); +} diff --git a/Src/GDDC/gddcCmdDlg.h b/Src/GDDC/gddcCmdDlg.h index 5d12e09..15c615a 100644 --- a/Src/GDDC/gddcCmdDlg.h +++ b/Src/GDDC/gddcCmdDlg.h @@ -1,6 +1,7 @@ #ifndef GDDCCMDDLG_H #define GDDCCMDDLG_H +#include "imageswitch.h" #include #include #include @@ -17,7 +18,6 @@ #include #include #include -#include "imageswitch.h" #define cmdLength 44 namespace Ui { @@ -230,7 +230,12 @@ private slots: void on_pushButton_6_7_pressed(); void on_pushButton_6_7_released(); void on_pushButton_6_8_clicked(); - +public slots: + //滚轮 + void wheelSwipe(int value); + void setMoveParm(QPointF size); +private: + void setPodIco(); }; #endif // GDDCCMDDLG_H diff --git a/Src/GDDC/gddcCmdDlg.ui b/Src/GDDC/gddcCmdDlg.ui index 36b1072..fd9a675 100644 --- a/Src/GDDC/gddcCmdDlg.ui +++ b/Src/GDDC/gddcCmdDlg.ui @@ -6,12 +6,12 @@ 0 0 - 1355 - 219 + 728 + 830 - + 0 0 @@ -35,13 +35,13 @@ 0 - 0 - 1121 - 211 + 10 + 471 + 785 - + 0 0 @@ -55,7 +55,7 @@ 16777215 - 220 + 16777215 @@ -74,13 +74,13 @@ - QTabWidget::TabPosition::North + QTabWidget::TabPosition::West QTabWidget::TabShape::Rounded - 4 + 0 Qt::TextElideMode::ElideNone @@ -90,1773 +90,106 @@ - 系统控制 + 控制 - - - - 680 - 40 - 100 - 21 - - - - - - - 吊舱时间更新 - - - - - - 10 - 10 - 241 - 161 - - - - 目标跟踪模板大小设置 - - - Qt::AlignmentFlag::AlignCenter - - - - - 70 - 130 - 91 - 21 - - - - - - - 设置 - - - - - - 110 - 70 - 113 - 21 - - - - - - - 110 - 100 - 113 - 21 - - - - - - - 10 - 70 - 81 - 20 - - - - 目标模板宽: - - - - - - 10 - 100 - 81 - 20 - - - - 目标模板高: - - - - - - 110 - 42 - 111 - 21 - - - - - - - 10 - 40 - 81 - 20 - - - - 类型选择: - - - - - - - 260 - 10 - 231 - 161 - - - - 视频显示模式设置 - - - Qt::AlignmentFlag::AlignCenter - - - - - 70 - 130 - 91 - 21 - - - - - - - 设置 - - - - - - 10 - 82 - 211 - 21 - - - - - - - 10 - 50 - 101 - 20 - - - - 显示模式选择: - - - - - - - 500 - 10 - 171 - 161 - - - - IP设置 - - - Qt::AlignmentFlag::AlignCenter - - - - - 40 - 130 - 91 - 21 - - - - - - - 设置 - - - - - - 10 - 80 - 31 - 21 - - - - - - - 20 - 50 - 81 - 20 - - - - 光电吊舱IP: - - - - - - 50 - 80 - 31 - 21 - - - - - - - 90 - 80 - 31 - 21 - - - - - - - 130 - 80 - 31 - 21 - - - - - - - - 载荷公用 - - - - - 10 - 10 - 100 - 31 - - - - - - - 图像切换 - - - - - - 10 - 50 - 100 - 31 - - - - - - - 抓图 - - - - - - 130 - 90 - 100 - 30 - - - - - - - 开始录像 - - - - - - 10 - 130 - 100 - 30 - - - - - - - 停止连续抓图 - - - - - - 130 - 130 - 100 - 30 - - - - - - - 停止录像 - - - - - - 10 - 90 - 100 - 30 - - - - - - - 开始连续抓图 - - - - - - 130 - 10 - 100 - 30 - - - - - - - 选点跟踪 - - - - - - 130 - 50 - 100 - 30 - - - - - - - 取消跟踪 - - - - - - 250 - 10 - 100 - 30 - - - - - - - 单次测距 - - - - - - 250 - 50 - 100 - 30 - - - - - - - 开启连续测距 - - - - - - 250 - 90 - 100 - 30 - - - - - - - 停止连续测距 - - - - - - 370 - 10 - 171 - 161 - - - - 字符叠加设置 - - - Qt::AlignmentFlag::AlignCenter - - - - - 20 - 70 - 111 - 21 - - - - - - - 20 - 110 - 111 - 30 - - - - - - - 设置 - - - - - - 20 - 40 - 131 - 20 - - - - OSD类型选择: - - - - - - - 可见光 - - - - - 10 - 50 - 100 - 30 - - - - - - - 变倍- - - - - - - 10 - 10 - 100 - 30 - - - - - - - 变倍+ - - - - - - 130 - 90 - 100 - 30 - - - - - - - 低照度模式 - - - - - - 370 - 130 - 100 - 30 - - - - - - - 恢复出场设置 - - - - - - 130 - 10 - 100 - 30 - - - - - - - 自动ICR开 - - - - - - 130 - 50 - 100 - 30 - - - - - - - 自动ICR关 - - - - - - 10 - 90 - 100 - 30 - - - - - - - 电子稳像开 - - - - - - 10 - 130 - 100 - 30 - - - - - - - 电子稳像关 - - - - - - 130 - 130 - 100 - 30 - - - - - - - 可见光镜头初始化 - - - - - - 250 - 130 - 100 - 30 - - - - - - - 恢复默认 - - - - - - 870 - 10 - 120 - 121 - - - - 透雾模式 - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - 10 - 70 - 100 - 30 - - - - - - - 设置 - - - - - - 10 - 30 - 101 - 21 - - - - - - - - 370 - 10 - 100 - 30 - - - - - - - 增益+ - - - - - - 370 - 50 - 100 - 30 - - - - - - - 增益- - - - - - - 370 - 90 - 100 - 30 - - - - - - - 自动增益 - - - - - - 490 - 10 - 99 - 31 - - - - - 0 - 0 - - - - - - - 亮度+ - - - - - - 490 - 50 - 99 - 31 - - - - - 0 - 0 - - - - - - - 亮度- - - - - - - 490 - 90 - 101 - 31 - - - - - 0 - 0 - - - - - - - 自动亮度 - - - - - - 250 - 10 - 99 - 31 - - - - - 0 - 0 - - - - - - - 对比度+ - - - - - - 250 - 50 - 99 - 31 - - - - - 0 - 0 - - - - - - - 对比度- - - - - - - 250 - 90 - 99 - 31 - - - - - 0 - 0 - - - - - - - 自动对比度 - - - - - - 610 - 10 - 241 - 121 - - - - 焦距设置 - - - - - 10 - 30 - 99 - 31 - - - - - 0 - 0 - - - - - - - 焦距+ - - - - - - 10 - 70 - 99 - 31 - - - - - 0 - 0 - - - - - - - 焦距- - - - - - - 130 - 30 - 99 - 31 - - - - - 0 - 0 - - - - - - - 130 - 70 - 99 - 31 - - - - - 0 - 0 - - - - - - - 设置 - - - - - - - 红外载荷 - - - - - 10 - 10 - 100 - 30 - - - - - - - 调焦+ - - - - - - 130 - 10 - 100 - 30 - - - - - - - 调焦- - - - - - - 370 - 10 - 100 - 30 - - - - - - - 测温模式 - - - - - - 250 - 50 - 100 - 30 - - - - - - - 电子放大 - - - - - - 250 - 90 - 100 - 30 - - - - - - - 场景补偿 - - - - - - 250 - 130 - 100 - 30 - - - - - - - 红外快门补偿 - - - - - - 590 - 50 - 100 - 30 - - - - - - - 红外图像增强 - - - - - - 10 - 90 - 100 - 30 - - - - - - - 亮度+ - - - - - - 10 - 130 - 100 - 30 - - - - - - - 对比度+ - - - - - - 370 - 50 - 100 - 30 - - - - - - - 观测模式 - - - - - - 130 - 90 - 100 - 30 - - - - - - - 亮度- - - - - - - 130 - 130 - 100 - 30 - - - - - - - 对比度- - - - - - - 10 - 50 - 100 - 30 - - - - - - - 变倍+ - - - - - - 130 - 50 - 100 - 30 - - - - - - - 变倍- - - - - - - 250 - 10 - 100 - 30 - - - - - - - 自动对焦 - - - - - - 370 - 90 - 100 - 30 - - - - - - - 恢复默认设置 - - - - - - 370 - 130 - 100 - 30 - - - - - - - 恢复出厂设置 - - - - - - 480 - 10 - 101 - 31 - - - - - - - 590 - 10 - 101 - 30 - - - - - - - 伪色彩切换 - - - - - - 480 - 50 - 101 - 31 - - - - - - - 710 - 10 - 181 - 151 - - - - 红外报警设置 - - - - - 80 - 110 - 71 - 25 - - - - - 0 - 0 - - - - - - - 设置 - - - - - - 75 - 70 - 81 - 23 - - - - - - - 160 - 70 - 14 - 21 - - - - - - - - - - 5 - 70 - 61 - 21 - - - - 温度阈值 - - - - - - 60 - 30 - 71 - 21 - - - - - - - 5 - 30 - 61 - 21 - - - - 检测开关 - - - - - - - 稳定平台 - - - - - 390 - 90 - 41 - 31 - - - - - - - - - - - - - 310 - 10 - 72 - 23 - - - - - - - - - - 300 - 80 - 81 - 51 - - - - - - - 归中 - - - - - - 140 - 10 - 151 - 20 - - - - color: rgb(255, 255, 255); -font: 12pt "Microsoft YaHei UI"; - - - 伺服控制步长选择: - - - - - - 320 - 140 - 41 - 31 - - - - - - - - - - - - - 250 - 90 - 41 - 31 - - - - - - - - - - - - - 320 - 40 - 41 - 31 - - - - - - - - - - - - - 10 - 130 - 100 - 30 - - - - - - - 航向锁定 - - - - - - 130 - 130 - 100 - 30 - - - - - - - 关伺服 - - - - - - 10 - 50 - 100 - 30 - - - - - - - 收藏模式 - - - - - - 10 - 90 - 100 - 30 - - - - - - - 航向随动 - - - - - - 10 - 10 - 100 - 30 - - - - - - - 垂直下视 - - - - - - 740 - 10 - 261 - 121 - - - - 指引 - - - - - 60 - 80 - 71 - 21 - - - - - - - 60 - 40 - 71 - 21 - - - - - - - 10 - 40 - 41 - 16 - - - - 方位: - - - - - - 10 - 80 - 41 - 16 - - - - 俯仰: - - - - - - 150 - 39 - 101 - 21 - - - - - - - 姿态指引 - - - - - - 150 - 79 - 101 - 21 - - - - - - - 数字引导 - - - - - - - 460 - 10 - 261 - 121 - - - - 扫描设置 - - - - - 150 - 79 - 100 - 21 - - - - - - - 云台扫描 - - - - - - 150 - 39 - 100 - 21 - - - - - - - 设置 - - - - - - 60 - 40 - 71 - 21 - - - - - - - 60 - 80 - 71 - 21 - - - - - - - 12 - 40 - 41 - 21 - - - - 角度: - - - - - - 12 - 80 - 41 - 21 - - - - 速度: - - + + + + 174 + 150 + 161 + 106 + + + + + + + + 0 + 30 + + + + + + + 垂直下视 + + + + + + + + 0 + 30 + + + + + + + 航向锁定 + + + + + + + + 0 + 30 + + + + + + + 航向随动 + + + + + + + + 0 + 30 + + + + + + + 镜头收藏 + + + + + + + + 0 + 30 + + + + + + + 关伺服 + + + + - + - 140 - 90 - 61 + 9 + 9 + 144 21 @@ -1865,16 +198,105 @@ font: 12pt "Microsoft YaHei UI"; font: 12pt "Microsoft YaHei UI"; - 陀螺 + 伺服控制步长选择: + + + + + + 174 + 9 + 72 + 24 + + + + + + + 9 + 250 + 324 + 71 + + + 视频 + + + + + + + 0 + 30 + + + + + + + 图像切换 + + + + + + + + 0 + 30 + + + + + + + 停止录像 + + + + + + + + 0 + 30 + + + + + + + 开始录像 + + + + + + + + 0 + 30 + + + + + + + 抓图 + + + + - 140 - 50 - 61 - 21 + 9 + 39 + 57 + 27 @@ -1885,96 +307,1845 @@ font: 12pt "Microsoft YaHei UI"; 框架 - - - - AI检测 - - + - 10 - 10 - 121 - 30 + 92 + 39 + 57 + 27 - + color: rgb(255, 255, 255); +font: 12pt "Microsoft YaHei UI"; - AI开 + 陀螺 - + - 10 - 130 - 121 - 30 + 260 + 430 + 71 + 91 - - + + 透雾模式 - - AI检测框隐藏 + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - 10 - 50 - 121 - 30 + + + + + + 0 + 25 + + + + + + + + + 0 + 30 + + + + + + + 设置 + + + + + + + + + 9 + 540 + 324 + 141 - - - - - AI关 + + 红外 + + + + + + + 0 + 30 + + + + + + + 调焦- + + + + + + + + 0 + 30 + + + + + + + 对比度- + + + + + + + + 0 + 30 + + + + + + + 亮度- + + + + + + + + 0 + 30 + + + + + + + 对比度+ + + + + + + + + 0 + 30 + + + + + + + 变倍- + + + + + + + + 0 + 30 + + + + + + + 亮度+ + + + + + + + + 0 + 30 + + + + + + + 变倍+ + + + + + + + + 0 + 30 + + + + + + + 调焦+ + + + + + + + + 0 + 30 + + + + + + + + + 0 + 30 + + + + + + + 伪色彩切换 + + + + + + + + + 9 + 690 + 321 + 71 + + + 激光测距 + + + + + + + 0 + 30 + + + + + + + 单次测距 + + + + + + + + 0 + 30 + + + + + + + 开启连续测距 + + + + + + + + 0 + 30 + + + + + + + 停止连续测距 + + + + - + - 10 - 90 - 121 - 30 + 174 + 30 + 161 + 111 - - + + 指引 - - AI检测框显示 + + + + + + 0 + 30 + + + + + + + 姿态指引 + + + + + + + + 0 + 30 + + + + + + + 数字引导 + + + + + + + + + 方位: + + + + + + + + 0 + 30 + + + + + + + + + + + + + 0 + 30 + + + + 俯仰: + + + + + + + + 0 + 30 + + + + + + + + + + + + 9 + 430 + 251 + 111 + + + + + + + + 0 + 30 + + + + + + + 低照度模式 + + + + + + + + 0 + 30 + + + + + + + 取消跟踪 + + + + + + + + 0 + 30 + + + + + + + 电子稳像关 + + + + + + + + 0 + 30 + + + + + + + 选点跟踪 + + + + + + + + 0 + 30 + + + + + + + 电子稳像开 + + + + + + + + 0 + 30 + + + + 速度: + + + 7 + + + + + + + + + 9 + 320 + 324 + 111 + + + 可见光 + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + + + 对比度- + + + + + + + + 0 + 30 + + + + + + + 变倍- + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + + + 焦距+ + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + + + 焦距- + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + + + 对比度+ + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + + + 亮度- + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + + + 亮度+ + + + + + + + + 0 + 30 + + + + + + + 变倍+ + + + + + + + + + -10 + 60 + 180 + 180 + + + + + 180 + 180 + + + + + 180 + 180 + + + + + + + + 55 + 55 + + + + + 55 + 55 + + + + + + + + + + + + + + + 55 + 55 + + + + + 55 + 55 + + + + + + + + + + + + + + + 55 + 55 + + + + + 55 + 55 + + + + + + + + + + + + + + + 0 + 0 + + + + + 55 + 55 + + + + + 55 + 55 + + + + + + + + + + + + + + + 0 + 0 + + + + + 55 + 55 + + + + + 55 + 55 + + + + + + + + + + + - + + + + 扩展控制 + + - 380 - 10 - 241 - 151 + 20 + 150 + 321 + 211 - 目标检测方式设置 + 可见光 + + + + + + + 0 + 30 + + + + + + + 增益- + + + + + + + + 0 + 30 + + + + + + + 增益+ + + + + + + + + 0 + 30 + + + + + + + 恢复出场设置 + + + + + + + + 0 + 30 + + + + + + + 可见光镜头初始化 + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + + + 自动亮度 + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + + + 自动对比度 + + + + + + + + 0 + 30 + + + + + + + 恢复默认 + + + + + + + + 0 + 30 + + + + + + + 自动ICR开 + + + + + + + + 0 + 30 + + + + + + + 自动增益 + + + + + + + + 0 + 30 + + + + + + + 自动ICR关 + + + + + + + + + 20 + 360 + 321 + 211 + - - - - 80 - 120 - 100 - 21 - + + 红外 + + + + + + + 0 + 30 + + + + + + + 场景补偿 + + + + + + + + 0 + 30 + + + + + + + 恢复默认设置 + + + + + + + + 0 + 30 + + + + + + + 恢复出厂设置 + + + + + + + + 0 + 30 + + + + + + + 观测模式 + + + + + + + + 0 + 30 + + + + + + + 红外快门补偿 + + + + + + + + 0 + 30 + + + + + + + 电子放大 + + + + + + + + 0 + 30 + + + + + + + 测温模式 + + + + + + + + 0 + 30 + + + + + + + 自动对焦 + + + + + + + + 0 + 30 + + + + + + + + + 0 + 30 + + + + + + + 红外图像增强 + + + + + + + + + 10 + 0 + 341 + 153 + + + + + + + 字符叠加设置 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 0 + 20 + + + + OSD类型选择: + + + + + + + + 0 + 30 + + + + + + + + + 0 + 30 + + + + + + + 设置 + + + + + + + + + + 视频显示模式设置 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 0 + 20 + + + + 显示模式选择: + + + + + + + + 0 + 30 + + + + + + + + + 0 + 30 + + + + + + + 设置 + + + + + + + + + + + + 10 + 580 + 341 + 152 + + + + + + + 红外报警设置 + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + 温度阈值 + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + + 0 + 0 + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + 设置 + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + 检测开关 + + + + + + + + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + + + + 目标跟踪模板大小设置 + + + Qt::AlignmentFlag::AlignCenter + + + + + + + 0 + 30 + + + + 类型选择: + + + + + + + + 0 + 30 + + + + + + + + + 0 + 30 + + + + 目标模板宽: + + + + + + + + 0 + 30 + + + + + + + + + 0 + 30 + + + + 目标模板高: + + + + + + + + 0 + 30 + + + + + + + + + 0 + 20 + + + + + 16777215 + 30 + + + + + + + 设置 + + + + + + + + + + + + 10 + 730 + 341 + 47 + + + + + + + + 0 + 30 + + + + + + + 停止连续抓图 + + + + + + + + 0 + 30 + + + + + + + 开始连续抓图 + + + + + + + + 0 + 30 + + + + + + + 吊舱时间更新 + + + + + + + + + AI检测 + + + + + 10 + 0 + 321 + 174 + + + + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + AI开 + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + AI关 + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + AI检测框显示 + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + AI检测框隐藏 + + + + + + + + + + AI跟踪 + + + Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + 目标类型: + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + 编号选择: + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + + + AI跟踪 + + + + + + + + + + + + + + 520 + 20 + 101 + 81 + + + + IP设置 + + + Qt::AlignmentFlag::AlignCenter + + + + + + 光电吊舱IP: + + + + + + + + + + + + + + + + @@ -1982,74 +2153,226 @@ font: 12pt "Microsoft YaHei UI"; 设置 - - - - 140 - 40 - 91 - 21 - + + + + + + + 540 + 100 + 71 + 61 + + + + 焦距设置 + + + + + + + 0 + 0 + - - - - 140 - 80 - 91 - 21 - + + + + + + 0 + 0 + + + + + + + 设置 + + + + + + + 520 + 270 + 131 + 51 + + + + 扫描设置 + + + + + 150 + 79 + 100 + 21 + + + + + + + 云台扫描 + + + + + + 150 + 39 + 100 + 21 + + + + + + + 设置 + + + + + + 60 + 40 + 71 + 21 + + + + + + + 60 + 80 + 71 + 21 + + + + + + + 12 + 40 + 41 + 21 + + + + 角度: + + + + + + 12 + 80 + 41 + 21 + + + + 速度: + + + + + + + 530 + 180 + 91 + 71 + + + + 目标检测方式设置 + + + - - - 10 - 40 - 121 - 20 - + + + 0 + 30 + + + + + 16777215 + 30 + 传感器类型选择: + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + - - - 10 - 80 - 121 - 20 - + + + 0 + 30 + + + + + 16777215 + 30 + 检测方式: - - - - - 640 - 10 - 221 - 151 - - - - 检测兴趣区域位置设置 - - - - - 110 - 120 - 91 - 21 - + + + + + + 0 + 30 + + + + 16777215 + 30 + + + + + + @@ -2057,60 +2380,105 @@ font: 12pt "Microsoft YaHei UI"; 设置 + + + + + + + 500 + 370 + 181 + 101 + + + + 检测兴趣区域位置设置 + + + - - - 10 - 40 - 81 - 20 - + + + 0 + 30 + + + + + 16777215 + 30 + 方位像素: + + + + + + 0 + 30 + + + + + 16777215 + 30 + + + + + - - - 10 - 80 - 81 - 20 - + + + 0 + 30 + + + + + 16777215 + 30 + 俯仰像素: - - - - 100 - 40 - 81 - 23 - - - + + - - - 100 - 80 - 81 - 23 - + + + 0 + 30 + + + + + 16777215 + 30 + + + - - - 10 - 120 - 91 - 21 - + + + 0 + 30 + + + + + 16777215 + 30 + @@ -2122,86 +2490,30 @@ font: 12pt "Microsoft YaHei UI"; false - - - - - 150 - 10 - 211 - 151 - - - - AI跟踪 - - - Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter - - - - - 60 - 120 - 100 - 21 - + + + + + + 0 + 30 + + + + + 16777215 + 30 + - AI跟踪 - - - - - - 100 - 40 - 101 - 21 - - - - - - - 12 - 40 - 81 - 21 - - - - 目标类型: - - - - - - 10 - 80 - 81 - 21 - - - - 编号选择: - - - - - - 100 - 80 - 101 - 21 - + 设置 - - + + diff --git a/Src/GDDC/gddcStateInfo.cpp b/Src/GDDC/gddcStateInfo.cpp index b5a012f..a237412 100644 --- a/Src/GDDC/gddcStateInfo.cpp +++ b/Src/GDDC/gddcStateInfo.cpp @@ -584,9 +584,9 @@ void GDDCStateInfo::UDPMessageReceive(QByteArray &da, int size) { } bool GDDCStateInfo::checkdata(QByteArray buffer, int length, int type) { - if (length != 64) { - return false; - } + // if (length != 64) { + // return false; + // } if ((buffer.at(0) != '\xFC') || (buffer.at(1) != '\x2C') || buffer.at(63) != '\xF0') { return false; diff --git a/Src/GDDC/gddcdlg.cpp b/Src/GDDC/gddcdlg.cpp index d7f332f..58cb8eb 100644 --- a/Src/GDDC/gddcdlg.cpp +++ b/Src/GDDC/gddcdlg.cpp @@ -9,182 +9,232 @@ #include #include #include - +#include #include "ui_gddcdlg.h" #pragma comment(lib, "Wtsapi32.lib") using namespace std; DWORD GetmPid(LPCWSTR ProcessName) { - PWTS_PROCESS_INFOW wts; - DWORD Count; - DWORD i = 0; - - BOOL result = - WTSEnumerateProcessesW(WTS_CURRENT_SERVER_HANDLE, 0, 1, &wts, &Count); - if (result == 0) { - cout << "WTSEnumerateProcessesW Error" << endl; - - return 1; - } - cout << "WTSEnumerateProcessesW Success" << endl; - for (i; i < Count; i++) { - if (lstrcmpiW(wts[i].pProcessName, ProcessName) == 0) { - DWORD pid = wts[i].ProcessId; - cout << "find pid:" << pid << endl; - - return pid; - break; - } + PWTS_PROCESS_INFOW wts; + DWORD Count; + DWORD i = 0; + + BOOL result = + WTSEnumerateProcessesW(WTS_CURRENT_SERVER_HANDLE, 0, 1, &wts, &Count); + if (result == 0) { + cout << "WTSEnumerateProcessesW Error" << endl; + + return 1; + } + cout << "WTSEnumerateProcessesW Success" << endl; + for (i; i < Count; i++) { + if (lstrcmpiW(wts[i].pProcessName, ProcessName) == 0) { + DWORD pid = wts[i].ProcessId; + cout << "find pid:" << pid << endl; + + return pid; + break; } + } - WTSFreeMemory(wts); + WTSFreeMemory(wts); } #define CONFIG_PATH "config.ini" -#define CMDPAGEHIGHT 210 +#define CMDPAGEWIDTH 380 #define STATEPAGEWIDTH 250 GDDCdlg::GDDCdlg(QWidget *parent) : QWidget(parent), ui(new Ui::GDDCdlg) { - ui->setupUi(this); + ui->setupUi(this); - initWindow(); - initParam(); - initSignalSlot(); + initWindow(); + initParam(); + initSignalSlot(); } GDDCdlg::~GDDCdlg() { - // 停止所有通信 - stopPushURL(); - stopConnectURL1(); - stopConnectURL2(); - stopConnectSerialCtrl(); - stopConnectUDPCtrl(); - stopConnectTCPCtrl(); - - delete m_DlgGDDCSet; - delete m_GDDCCmdDlg; - delete m_GDDCStateDlg; - delete ui; + // 停止所有通信 + stopPushURL(); + stopConnectURL1(); + stopConnectURL2(); + stopConnectSerialCtrl(); + stopConnectUDPCtrl(); + stopConnectTCPCtrl(); + + delete m_DlgGDDCSet; + delete m_GDDCCmdDlg; + delete m_GDDCStateDlg; + delete ui; } // 初始化window void GDDCdlg::initWindow() { - QPalette palette; - // 设置主窗口背景颜色 - palette.setColor(QPalette::Window, QColor(50, 50, 50)); - this->setPalette(palette); - // 嵌入到主窗口 - setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint); - hide(); - - m_DlgGDDCSet = new GDDCSet(this); - m_DlgGDDCSet->setWindowFlags(Qt::Dialog); - m_DlgGDDCSet->setWindowModality(Qt::WindowModal); // 设置为模态对话框 - m_GDDCCmdDlg = new GDDCCmdDlg(this); - m_GDDCStateDlg = new GDDCStateInfo(this); - ui->pushButShowStatePage->setIcon(QIcon(":/res/right.png")); - ui->pushButShowCmdPage->setIcon(QIcon(":/res/down.png")); - - // connect( - // ui->WgtffmpegVideo, &VideoWidget::sendErrorMessageSignal, this, - // [&](QString message, int type) { - // qDebug() << "GDDC receive message:" << message; - // g_notifyManager->notify(message, "", type); - // }, - // Qt::UniqueConnection); - connect(ui->WgtffmpegVideo, &VideoWidget::sendErrorMessageSignal, this, - &GDDCdlg::showErrorMessage, Qt::UniqueConnection); - ui->WgtffmpegVideo->setVedioSaveFileDirPath("./Video"); + QPalette palette; + // 设置主窗口背景颜色 + palette.setColor(QPalette::Window, QColor(50, 50, 50)); + this->setPalette(palette); + // 嵌入到主窗口 + setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint); + hide(); + + m_DlgGDDCSet = new GDDCSet(this); + m_DlgGDDCSet->setWindowFlags(Qt::Dialog); + m_DlgGDDCSet->setWindowModality(Qt::WindowModal); // 设置为模态对话框 + m_GDDCCmdDlg = new GDDCCmdDlg(this); + m_GDDCStateDlg = new GDDCStateInfo(this); + ui->pushButShowStatePage->setIcon(QIcon(":/res/right.png")); + ui->pushButShowCmdPage->setIcon(QIcon(":/res/right.png")); + + // connect( + // ui->WgtffmpegVideo, &VideoWidget::sendErrorMessageSignal, this, + // [&](QString message, int type) { + // qDebug() << "GDDC receive message:" << message; + // g_notifyManager->notify(message, "", type); + // }, + // Qt::UniqueConnection); + connect(ui->WgtffmpegVideo, &VideoWidget::sendErrorMessageSignal, this, + &GDDCdlg::showErrorMessage, Qt::UniqueConnection); + ui->WgtffmpegVideo->setVedioSaveFileDirPath("./Video"); } // 初始化参数 void GDDCdlg::initParam() { - pointSelectionTracking = false; - Is_openVideo = false; - isCmdPageShow = true; - isStatePageShow = true; - detectionAreaSetting = false; - connectFlag.resize(12, false); + pointSelectionTracking = false; + Is_openVideo = false; + isCmdPageShow = true; + isStatePageShow = false; + detectionAreaSetting = false; + connectFlag.resize(12, false); + + _delta = 0; + + _wheelStopTime = new QTimer(this); + _wheelStopTime->setInterval(300); + _wheelStopTime->setSingleShot(true); + _dragFlag = false; + _moveFlag = false; + + firstLocation = new QLabel(this); + firstLocation->setPixmap(QPixmap(":/img/Pod/c.png")); + firstLocation->setScaledContents(true); + firstLocation->resize(30,30); + firstLocation->setStyleSheet("border: none; background: transparent;"); + firstLocation->hide(); + + lastLocation = new QLabel(this); + lastLocation->setPixmap(QPixmap(":/img/Pod/circle.png")); + lastLocation->setScaledContents(true); + lastLocation->resize(25,25); + lastLocation->setStyleSheet("border: none; background: transparent;"); + lastLocation->hide(); + + wheelPlus = new QLabel(this); + wheelPlus->setPixmap(QPixmap(":/img/Pod/plus.png")); + wheelPlus->setScaledContents(true); + wheelPlus->resize(30,30); + wheelPlus->setStyleSheet("border: none; background: transparent;"); + wheelPlus->hide(); + + wheelSub = new QLabel(this); + wheelSub->setPixmap(QPixmap(":/img/Pod/sub.png")); + wheelSub->setScaledContents(true); + wheelSub->resize(30,30); + wheelSub->setStyleSheet("border: none; background: transparent;"); + wheelSub->hide(); } // 初始化信号与槽 void GDDCdlg::initSignalSlot() { - /*******有四种方式*******/ - // 方式一 - connect(ui->pushButtonSet, SIGNAL(clicked()), this, - SLOT(pushButtonSet_clicked())); - // 方式二 - // connect(ui->pushButtonSet,&QPushButton::clicked,this,&::GDDCdlg::pushButtonSet_clicked); - // 方式三 - // connect(ui->pushButtonSet, - // QOverload::of(&QPushButton::clicked),this,&::GDDCdlg::pushButtonSet_clicked); - // 方式四 - // connect(ui->pushButtonSet,&QPushButton::clicked,[=](bool - // check){pushButtonSet_clicked();}); - connect(ui->pushButShowCmdPage, SIGNAL(clicked()), this, - SLOT(pushButShowCmdPage_clicked())); // 控制页面隐藏显示按钮 - connect(ui->pushButShowStatePage, SIGNAL(clicked()), this, - SLOT(pushButShowStatePage_clicked())); // 状态页面隐藏显示按钮 - connect(m_DlgGDDCSet, SIGNAL(SignalStartConnect(int)), this, - SLOT(startConnect(int))); // 开始连接 - connect(m_DlgGDDCSet, SIGNAL(SignalStopConnect(int)), this, - SLOT(stopConnect(int))); // 停止连接 + /*******有四种方式*******/ + // 方式一 + connect(ui->pushButtonSet, SIGNAL(clicked()), this, + SLOT(pushButtonSet_clicked())); + // 方式二 + // connect(ui->pushButtonSet,&QPushButton::clicked,this,&::GDDCdlg::pushButtonSet_clicked); + // 方式三 + // connect(ui->pushButtonSet, + // QOverload::of(&QPushButton::clicked),this,&::GDDCdlg::pushButtonSet_clicked); + // 方式四 + // connect(ui->pushButtonSet,&QPushButton::clicked,[=](bool + // check){pushButtonSet_clicked();}); + connect(ui->pushButShowCmdPage, SIGNAL(clicked()), this, + SLOT(pushButShowCmdPage_clicked())); // 控制页面隐藏显示按钮 + connect(ui->pushButShowStatePage, SIGNAL(clicked()), this, + SLOT(pushButShowStatePage_clicked())); // 状态页面隐藏显示按钮 + connect(m_DlgGDDCSet, SIGNAL(SignalStartConnect(int)), this, + SLOT(startConnect(int))); // 开始连接 + connect(m_DlgGDDCSet, SIGNAL(SignalStopConnect(int)), this, + SLOT(stopConnect(int))); // 停止连接 + + connect(this, &GDDCdlg::wheelSendData, m_GDDCCmdDlg, &GDDCCmdDlg::wheelSwipe); + connect(_wheelStopTime, &QTimer::timeout, this, [this](){ + emit wheelSendData(0); + qDebug()<<"滚轮停止了"; + // if(wheelPlus->isVisible()) + // { + // wheelPlus->hide(); + // } + // else if(wheelSub->isVisible()) + // { + // wheelSub->hide(); + // } + }); } // 槽函数开始连接 void GDDCdlg::startConnect(int type) { - switch (type) { - case 1: // 播放视频1 - stopConnectURL2(); - startConnectURL1(); - break; - case 2: // 播放视频2 - stopConnectURL1(); - startConnectURL2(); - break; - case 3: // 串口控制 - startConnectSerialCtrl(); - break; - case 4: // UDP控制 - stopConnectTCPCtrl(); - startConnectUDPCtrl(); - break; - case 5: // TCP控制 - stopConnectUDPCtrl(); - startConnectTCPCtrl(); - break; - case 6: // 视频(1)推流 - startPushURL(); - break; - default: - break; - } + switch (type) { + case 1: // 播放视频1 + stopConnectURL2(); + startConnectURL1(); + break; + case 2: // 播放视频2 + stopConnectURL1(); + startConnectURL2(); + break; + case 3: // 串口控制 + startConnectSerialCtrl(); + break; + case 4: // UDP控制 + stopConnectTCPCtrl(); + startConnectUDPCtrl(); + break; + case 5: // TCP控制 + stopConnectUDPCtrl(); + startConnectTCPCtrl(); + break; + case 6: // 视频(1)推流 + startPushURL(); + break; + default: + break; + } } // 槽函数停止连接 void GDDCdlg::stopConnect(int type) { - switch (type) { - case 1: - stopConnectURL1(); - break; - case 2: - stopConnectURL2(); - break; - case 3: - stopConnectSerialCtrl(); - break; - case 4: - stopConnectUDPCtrl(); - break; - case 5: - stopConnectTCPCtrl(); - break; - case 6: - stopPushURL(); - break; - default: - break; - } + switch (type) { + case 1: + stopConnectURL1(); + break; + case 2: + stopConnectURL2(); + break; + case 3: + stopConnectSerialCtrl(); + break; + case 4: + stopConnectUDPCtrl(); + break; + case 5: + stopConnectTCPCtrl(); + break; + case 6: + stopPushURL(); + break; + default: + break; + } } // bool GDDCdlg::eventFilter(QObject *watched, QEvent *event) // { @@ -202,447 +252,533 @@ void GDDCdlg::stopConnect(int type) { // } // 鼠标左键 void GDDCdlg::mousePressEvent(QMouseEvent *event) { - // 如果鼠标左键按下 - if (event->type() == QEvent::MouseButtonPress) { - // AI检测区域设置 - if (m_GDDCCmdDlg->detectionAreaSetting == true) { - QPointF sPoint1 = event->globalPosition(); - sPoint1 = QCursor::pos(); - QPointF widgetPoint = ui->WgtffmpegVideo->mapFromGlobal(sPoint1); - double a = ui->WgtffmpegVideo->width(); - double b = ui->WgtffmpegVideo->height(); - double dir = 1920 / a * widgetPoint.rx() - 960; - double pitch = -(1080 / b * widgetPoint.ry() - 540); - m_GDDCCmdDlg->setAIDetcLineEditText(QString::number((int)dir), - QString::number((int)pitch)); - } - // 目标跟踪 - if (m_GDDCCmdDlg->pointSelectionTracking == true) { - QPointF sPoint1 = event->globalPosition(); - QPointF widgetPoint = ui->WgtffmpegVideo->mapFromGlobal(sPoint1); - double a = ui->WgtffmpegVideo->width(); - double b = ui->WgtffmpegVideo->height(); - double dir = 1920 / a * widgetPoint.rx() - 960; - double pitch = -(1080 / b * widgetPoint.ry() - 540); + // 如果鼠标左键按下 + /*if (event->type() == QEvent::MouseButtonPress) { + // AI检测区域设置 + if (m_GDDCCmdDlg->detectionAreaSetting == true) { + QPointF sPoint1 = event->globalPosition(); + sPoint1 = QCursor::pos(); + QPointF widgetPoint = ui->WgtffmpegVideo->mapFromGlobal(sPoint1); + double a = ui->WgtffmpegVideo->width(); + double b = ui->WgtffmpegVideo->height(); + double dir = 1920 / a * widgetPoint.rx() - 960; + double pitch = -(1080 / b * widgetPoint.ry() - 540); + m_GDDCCmdDlg->setAIDetcLineEditText(QString::number((int)dir), + QString::number((int)pitch)); + } + + }*/ + if(ui->WgtffmpegVideo->underMouse()) + { + if(event->button() == Qt::LeftButton) + { + //记录鼠标按下位置 + _dragStartPositon = event->pos(); + //QPointF b = event->globalPosition(); + qDebug() << "局部坐标" << "x" << _dragStartPositon.x() << "y" << _dragStartPositon.y(); + //qDebug() << "全局坐标" << "x" << b.x() << "y" << b.y(); + _dragFlag = true; + } + } +} +// 鼠标移动 +void GDDCdlg::mouseMoveEvent(QMouseEvent *event) { + /*if (m_GDDCCmdDlg->detectionAreaSetting == true) { + // qDebug() << this->geometry().x(); + // qDebug() << this->geometry().y(); + QPointF sPoint1 = event->globalPosition(); + // qDebug()<<"相对于屏幕坐标1:"<<"("<mapFromGlobal(sPoint2); + // qDebug()<<"相对于窗口坐标:"<<"("<WgtffmpegVideo->mapFromGlobal(sPoint1); + // qDebug()<<"相对于控件坐标:"<<"("<WgtffmpegVideo->width(); + double b = ui->WgtffmpegVideo->height(); + double dir = 1920 / a * widgetPoint.rx() - 960; + double pitch = -(1080 / b * widgetPoint.ry() - 540); + m_GDDCCmdDlg->setAIDetcLineEditText(QString::number((int)dir), + QString::number((int)pitch)); + }*/ + if(_dragFlag)//点击并且移动 + { + QPointF diff = event->pos() - _dragStartPositon; + qDebug() << "x:" << diff.x() <<"y:" <setMoveParm(diff); + _moveFlag = true; + firstLocation->move((_dragStartPositon - QPoint(firstLocation->width()/2, firstLocation->height()/2)).toPoint()); + lastLocation->move(event->pos() - QPoint(lastLocation->width() / 2, lastLocation->height() / 2)); + firstLocation->show(); + lastLocation->show(); + } +} + +void GDDCdlg::mouseReleaseEvent(QMouseEvent *event) +{ + if(ui->WgtffmpegVideo->underMouse()) + { + if(event->button() == Qt::LeftButton && _moveFlag) + { + _moveFlag = false; std::byte buffer[10]; - buffer[0] = (std::byte)0x3A; - buffer[1] = (std::byte)(dir); - buffer[2] = (std::byte)((int)dir >> 8); - buffer[3] = (std::byte)pitch; - buffer[4] = (std::byte)((int)pitch >> 8); - buffer[5] = (std::byte)0x00; + buffer[5] = (std::byte)0x70; buffer[6] = (std::byte)0x00; buffer[7] = (std::byte)0x00; buffer[8] = (std::byte)0x00; buffer[9] = (std::byte)0x00; - // 发送5次 + // 发送3次 m_GDDCCmdDlg->sendCurDate(buffer, 3); + firstLocation->hide(); + lastLocation->hide(); + } + else if(event->button() == Qt::LeftButton && _dragFlag) + { + // 目标跟踪 + if (m_GDDCCmdDlg->pointSelectionTracking == true) { + QPointF sPoint1 = event->globalPosition(); + QPointF widgetPoint = ui->WgtffmpegVideo->mapFromGlobal(sPoint1); + double a = ui->WgtffmpegVideo->width(); + double b = ui->WgtffmpegVideo->height(); + double dir = 1920 / a * widgetPoint.rx() - 960; + double pitch = -(1080 / b * widgetPoint.ry() - 540); + std::byte buffer[10]; + buffer[0] = (std::byte)0x3A; + buffer[1] = (std::byte)(dir); + buffer[2] = (std::byte)((int)dir >> 8); + buffer[3] = (std::byte)pitch; + buffer[4] = (std::byte)((int)pitch >> 8); + buffer[5] = (std::byte)0x00; + buffer[6] = (std::byte)0x00; + buffer[7] = (std::byte)0x00; + buffer[8] = (std::byte)0x00; + buffer[9] = (std::byte)0x00; + + // 发送5次 + m_GDDCCmdDlg->sendCurDate(buffer, 3); + } } - } -} -// 鼠标移动 -void GDDCdlg::mouseMoveEvent(QMouseEvent *event) { - if (m_GDDCCmdDlg->detectionAreaSetting == true) { - // qDebug() << this->geometry().x(); - // qDebug() << this->geometry().y(); - QPointF sPoint1 = event->globalPosition(); - // qDebug()<<"相对于屏幕坐标1:"<<"("<mapFromGlobal(sPoint2); - // qDebug()<<"相对于窗口坐标:"<<"("<WgtffmpegVideo->mapFromGlobal(sPoint1); - // qDebug()<<"相对于控件坐标:"<<"("<WgtffmpegVideo->width(); - double b = ui->WgtffmpegVideo->height(); - double dir = 1920 / a * widgetPoint.rx() - 960; - double pitch = -(1080 / b * widgetPoint.ry() - 540); - m_GDDCCmdDlg->setAIDetcLineEditText(QString::number((int)dir), - QString::number((int)pitch)); } } // 区域重绘 void GDDCdlg::resizeEvent(QResizeEvent *event) { - resizeUI(); // 重新设置布局 + resizeUI(); // 重新设置布局 } // 重新设置布局 void GDDCdlg::resizeUI() { - /* -------------->x - * | (0,0) - * | - * | - * | - * | - * ↓ y - */ - double GDDCPageHeight = (double)(this->height()); - double GDDCPageWidth = (double)(this->width()); - // qDebug()<<"宽度,高度:"<setGeometry(0, GDDCPageHeight - cmdAreaHeight, - (int)cmdAreaWidth, (int)cmdAreaHeight); - m_GDDCCmdDlg->setTabWidgetGeometry(0, 0, cmdAreaWidth, cmdAreaHeight); - - /*********状态区位置和大小设置***********/ - double stateAreaHeight = GDDCPageHeight; - double stateAreaWidth; - if (isStatePageShow) { - stateAreaWidth = STATEPAGEWIDTH; - } else { - stateAreaWidth = 0; - } - m_GDDCStateDlg->setGeometry(GDDCPageWidth - stateAreaWidth, 0, - stateAreaWidth, stateAreaHeight); - m_GDDCStateDlg->setTableViewGeometry(0, 0, stateAreaWidth, stateAreaHeight); - - /*******视频区位置和大小设置********/ - double VideoAreaHeight = GDDCPageHeight - cmdAreaHeight; // 视频区高度 - double VideoAreaWidth = GDDCPageWidth - stateAreaWidth; // 视频区宽度 - // //高度值相对比较大 - // if(VideoAreaHeight*16>VideoAreaWidth*9) - // { - // double setVideoAreaWidth = - // VideoAreaWidth;//等于吊舱页面宽度-状态区高度 double - // setVideoAreaHeight = VideoAreaWidth*9/16; - // ui->WgtffmpegVideo->setGeometry(0,0.5*(VideoAreaHeight-setVideoAreaHeight),(int)setVideoAreaWidth,(int)setVideoAreaHeight); - // } - // //宽度值相对比较大 - // else - // { - // double setVideoAreaHeight = - // VideoAreaHeight;//等于吊舱页面高度-控制区高度 double - // setVideoAreaWidth = VideoAreaHeight*16/9; - // ui->WgtffmpegVideo->setGeometry(0.5*(VideoAreaWidth-setVideoAreaWidth),0,(int)setVideoAreaWidth,(int)setVideoAreaHeight); - // } - ui->WgtffmpegVideo->setGeometry(0, 0, (int)VideoAreaWidth, - (int)VideoAreaHeight); - - /**************设置按钮****************/ - ui->pushButtonSet->setGeometry(GDDCPageWidth - stateAreaWidth, 0, 30, 30); - ui->pushButtonSet->raise(); - - /**********控制页显示隐藏按钮********/ - ui->pushButShowCmdPage->setGeometry( - cmdAreaWidth * 0.5, GDDCPageHeight - cmdAreaHeight - 15, 50, 15); - ui->pushButShowCmdPage->raise(); - - /**********状态页显示隐藏按钮********/ - ui->pushButShowStatePage->setGeometry( - GDDCPageWidth - stateAreaWidth - 15, - (stateAreaHeight - cmdAreaHeight) * 0.5, 15, 50); - ui->pushButShowStatePage->raise(); + /* -------------->x + * | (0,0) + * | + * | + * | + * | + * ↓ y + */ + double GDDCPageHeight = (double)(this->height()); + double GDDCPageWidth = (double)(this->width()); + // qDebug()<<"宽度,高度:"<setGeometry(GDDCPageWidth - cmdAreaWidth, 0, (int)cmdAreaWidth, + GDDCPageHeight); + m_GDDCCmdDlg->setTabWidgetGeometry(0, 0, cmdAreaWidth, cmdAreaHeight); + + /*********状态区位置和大小设置***********/ + double stateAreaHeight = 0; + double stateAreaWidth = 0; + if (isStatePageShow) { + stateAreaWidth = STATEPAGEWIDTH; + stateAreaHeight = GDDCPageHeight; + } + m_GDDCStateDlg->setGeometry(0, 0, stateAreaWidth, stateAreaHeight); + m_GDDCStateDlg->setTableViewGeometry(0, 0, stateAreaWidth, stateAreaHeight); + + /*******视频区位置和大小设置********/ + double VideoAreaHeight = GDDCPageHeight /*- cmdAreaHeight*/; // 视频区高度 + double VideoAreaWidth = GDDCPageWidth - cmdAreaWidth; // 视频区宽度 + // //高度值相对比较大 + // if(VideoAreaHeight*16>VideoAreaWidth*9) + // { + // double setVideoAreaWidth = + // VideoAreaWidth;//等于吊舱页面宽度-状态区高度 double + // setVideoAreaHeight = VideoAreaWidth*9/16; + // ui->WgtffmpegVideo->setGeometry(0,0.5*(VideoAreaHeight-setVideoAreaHeight),(int)setVideoAreaWidth,(int)setVideoAreaHeight); + // } + // //宽度值相对比较大 + // else + // { + // double setVideoAreaHeight = + // VideoAreaHeight;//等于吊舱页面高度-控制区高度 double + // setVideoAreaWidth = VideoAreaHeight*16/9; + // ui->WgtffmpegVideo->setGeometry(0.5*(VideoAreaWidth-setVideoAreaWidth),0,(int)setVideoAreaWidth,(int)setVideoAreaHeight); + // } + ui->WgtffmpegVideo->setGeometry(0, 0, (int)VideoAreaWidth, + (int)VideoAreaHeight); + + /**************设置按钮****************/ + ui->pushButtonSet->setGeometry(GDDCPageWidth - cmdAreaWidth - 30, 0, 30, 30); + ui->pushButtonSet->raise(); + + /**********控制页显示隐藏按钮********/ + ui->pushButShowCmdPage->setGeometry(GDDCPageWidth - cmdAreaWidth - 15, + GDDCPageHeight * 0.5, 15, 50); + ui->pushButShowCmdPage->raise(); + + /**********状态页显示隐藏按钮********/ + ui->pushButShowStatePage->setGeometry(0 + stateAreaWidth, + GDDCPageHeight * 0.5, 15, 50); + ui->pushButShowStatePage->raise(); } void GDDCdlg::setGlobalSetMap( std::unordered_map &gSetMap) { - if (m_DlgGDDCSet) { - m_DlgGDDCSet->initPullURL(gSetMap["光电吊舱"].net.remoteIp); - } + if (m_DlgGDDCSet) { + m_DlgGDDCSet->initPullURL(gSetMap["光电吊舱"].net.remoteIp); + } } // 定时器处理 void GDDCdlg::GDDCControlTimeOut() { - if (m_GDDCCmdDlg->sendTimes > 0) { // 优先发送次数指令 - m_GDDCCmdDlg->sendTimes -= 1; - - // UDP控制 - if (connectFlag[3]) { - udpSocket->writeDatagram( - m_GDDCCmdDlg->m_DCcmdBuffer, - m_DlgGDDCSet->m_myPairNetwork.getRemoteAddr(), - m_DlgGDDCSet->m_myPairNetwork.getRemotePort()); - } - // TCP控制 - - // 串口控制 + if (m_GDDCCmdDlg->sendTimes > 0) { // 优先发送次数指令 + m_GDDCCmdDlg->sendTimes -= 1; - if (m_GDDCCmdDlg->sendTimes == 0) { - m_GDDCCmdDlg->clearTJDCCmdBuffer(); - } - } else { // 发送常发帧或长按指令 - m_GDDCCmdDlg->UpdateDataTJDC(); - // UDP控制 - if (connectFlag[3]) { - udpSocket->writeDatagram( - m_GDDCCmdDlg->m_DCcmdBuffer, - m_DlgGDDCSet->m_myPairNetwork.getRemoteAddr(), - m_DlgGDDCSet->m_myPairNetwork.getRemotePort()); - } + // UDP控制 + if (connectFlag[3]) { + udpSocket->writeDatagram(m_GDDCCmdDlg->m_DCcmdBuffer, + m_DlgGDDCSet->m_myPairNetwork.getRemoteAddr(), + m_DlgGDDCSet->m_myPairNetwork.getRemotePort()); + } + // TCP控制 - // TCP控制 + // 串口控制 - // 串口控制 + if (m_GDDCCmdDlg->sendTimes == 0) { + m_GDDCCmdDlg->clearTJDCCmdBuffer(); + } + } else { // 发送常发帧或长按指令 + m_GDDCCmdDlg->UpdateDataTJDC(); + // UDP控制 + if (connectFlag[3]) { + udpSocket->writeDatagram(m_GDDCCmdDlg->m_DCcmdBuffer, + m_DlgGDDCSet->m_myPairNetwork.getRemoteAddr(), + m_DlgGDDCSet->m_myPairNetwork.getRemotePort()); } + + // TCP控制 + + // 串口控制 + } } // 播放视频1 void GDDCdlg::startConnectURL1() { - if (!connectFlag[0]) { - connectFlag[0] = true; - /* ffmpegvideoDlg版本 - ffmpegvideoDlg *videoDlg = ui->WgtffmpegVideo; - // 开始拉流 - videoDlg->m_flowType = m_DlgGDDCSet->m_FlowType; - videoDlg->setStreamIP(m_DlgGDDCSet->m_playURL1); - videoDlg->setPlayVideo(true); - // ui->WgtffmpegVideo->play(m_DlgGDDCSet->m_playURL1); - */ - - VideoWidget *videoWidget = ui->WgtffmpegVideo; - if (!videoWidget->play(m_DlgGDDCSet->m_playURL1)) { - g_notifyManager->notify("获取视频流失败!", "", 2, 3000); - // ui->WgtffmpegVideo->stopPlay(); - // m_DlgGDDCSet->setPullBtnText(false); - }; - } + if (!connectFlag[0]) { + connectFlag[0] = true; + /* ffmpegvideoDlg版本 + ffmpegvideoDlg *videoDlg = ui->WgtffmpegVideo; + // 开始拉流 + videoDlg->m_flowType = m_DlgGDDCSet->m_FlowType; + videoDlg->setStreamIP(m_DlgGDDCSet->m_playURL1); + videoDlg->setPlayVideo(true); + // ui->WgtffmpegVideo->play(m_DlgGDDCSet->m_playURL1); + */ + + VideoWidget *videoWidget = ui->WgtffmpegVideo; + if (!videoWidget->play(m_DlgGDDCSet->m_playURL1)) { + g_notifyManager->notify("获取视频流失败!", "", 2, 3000); + // ui->WgtffmpegVideo->stopPlay(); + // m_DlgGDDCSet->setPullBtnText(false); + }; + } } // 关闭视频1 void GDDCdlg::stopConnectURL1() { - if (connectFlag[0]) { - connectFlag[0] = false; - // ui->WgtffmpegVideo->setPlayVideo(false); - ui->WgtffmpegVideo->stopPlay(); - } + if (connectFlag[0]) { + connectFlag[0] = false; + // ui->WgtffmpegVideo->setPlayVideo(false); + ui->WgtffmpegVideo->stopPlay(); + } } // 播放视频2 void GDDCdlg::startConnectURL2() { - if (!connectFlag[1]) { - connectFlag[1] = true; - } + if (!connectFlag[1]) { + connectFlag[1] = true; + } } // 关闭视频2 void GDDCdlg::stopConnectURL2() { - if (connectFlag[1]) { - connectFlag[1] = false; - } + if (connectFlag[1]) { + connectFlag[1] = false; + } } void GDDCdlg::startConnectSerialCtrl() { - if (!connectFlag[2]) { - connectFlag[2] = true; - } + if (!connectFlag[2]) { + connectFlag[2] = true; + } } void GDDCdlg::stopConnectSerialCtrl() { - if (connectFlag[2]) { - connectFlag[2] = false; - } + if (connectFlag[2]) { + connectFlag[2] = false; + } } // 开始UDP控制通信 void GDDCdlg::startConnectUDPCtrl() { - if (!connectFlag[3]) { - /*启动定时器*/ - GDDCControlTimer = new QTimer(); - GDDCControlTimer->setInterval(100); - connect(GDDCControlTimer, &QTimer::timeout, this, [=]() { - GDDCControlTimeOut(); - }); - GDDCControlTimer->start(); - - // 创建udp socket对象 - udpSocket = new QUdpSocket(this); - /*接收*/ - // QList ipAddressesList = - // QNetworkInterface::allAddresses();//获取本机ip - udpSocket->bind(m_DlgGDDCSet->m_myPairNetwork.getLocalPort()); - connect(udpSocket, SIGNAL(readyRead()), this, - SLOT(UDPMessageReceive())); - connectFlag[3] = true; - } + if (!connectFlag[3]) { + /*启动定时器*/ + GDDCControlTimer = new QTimer(); + GDDCControlTimer->setInterval(40); + connect(GDDCControlTimer, &QTimer::timeout, this, + [=]() { GDDCControlTimeOut(); }); + GDDCControlTimer->start(); + + // 创建udp socket对象 + udpSocket = new QUdpSocket(this); + /*接收*/ + // QList ipAddressesList = + // QNetworkInterface::allAddresses();//获取本机ip + udpSocket->bind(m_DlgGDDCSet->m_myPairNetwork.getLocalPort()); + connect(udpSocket, SIGNAL(readyRead()), this, SLOT(UDPMessageReceive())); + connectFlag[3] = true; + } } // 停止UDP控制通信 void GDDCdlg::stopConnectUDPCtrl() { - if (connectFlag[3]) { - // 关闭定时器 - GDDCControlTimer->stop(); - delete GDDCControlTimer; - udpSocket->abort(); // 关闭套接字,并丢缓冲区中的所有待处理数据 - delete udpSocket; - connectFlag[3] = false; - } + if (connectFlag[3]) { + // 关闭定时器 + GDDCControlTimer->stop(); + delete GDDCControlTimer; + udpSocket->abort(); // 关闭套接字,并丢缓冲区中的所有待处理数据 + delete udpSocket; + connectFlag[3] = false; + } } // 开始TCP控制通信 void GDDCdlg::startConnectTCPCtrl() { - if (!connectFlag[4]) { - connectFlag[4] = true; - } + if (!connectFlag[4]) { + connectFlag[4] = true; + } } // 停止TCP控制通信 void GDDCdlg::stopConnectTCPCtrl() { - if (connectFlag[4]) { - connectFlag[4] = false; - } + if (connectFlag[4]) { + connectFlag[4] = false; + } } // 开始视频推流 void GDDCdlg::startPushURL() { - if (!connectFlag[5]) { - // //方式1:命令行推流 - // process = new QProcess(); - // connect(process, &QProcess::readyReadStandardOutput, this, [=]() - // mutable - // { - // QString Output = process->readAllStandardOutput(); - // qDebug() << "Output:" << Output; - // }); - // connect(process, &QProcess::readyReadStandardError, this, [=]() - // mutable { - // QString Error = process->readAllStandardError(); - // qDebug() << "Error Output:" << Error; - // }); - - // // process->start("cmd",QStringList()<<"/c"<<"ffmpeg -i - // // rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid -c copy - // -f flv - // // rtmp://182.92.130.23/app/test"); - - // QStringList m_cmd; - // QString str; - // // str = "ffmpeg -i " + m_DlgGDDCSet->m_playURL1 + " -c copy -f flv " - // + - // // m_DlgGDDCSet->m_pushURL; - // str = "ffmpeg -rtsp_transport tcp -i " + m_DlgGDDCSet->m_playURL1 + " - // -c:v libx264 -c:a copy -f flv " + - // m_DlgGDDCSet->m_pushURL; - // m_cmd << "/c" << str; - // process->start("cmd", m_cmd); - - // //方式2:代码推流 - // if(!connectFlag[0]) - // { - // QMessageBox::information(NULL, tr("提示"), "请先开始连接", - // QMessageBox::Ok); m_DlgGDDCSet->setPushStreamText("推送"); - // return; - // } - - /* ffmpegvideoDlg版本 - ffmpegvideoDlg *videoDlg = ui->WgtffmpegVideo; - videoDlg->setStreamIP(m_DlgGDDCSet->m_playURL1); - videoDlg->setPushStreamIP(m_DlgGDDCSet->m_pushURL); - qDebug() << "DLG:" << m_DlgGDDCSet->m_pushURL; - videoDlg->setPushStream(true); - */ - - ui->WgtffmpegVideo->setPullURL(m_DlgGDDCSet->m_playURL1); - if (!ui->WgtffmpegVideo->pushStream(m_DlgGDDCSet->m_pushURL)) { - g_notifyManager->notify("推流失败!", "", 2, 3000); - }; - m_DlgGDDCSet->setPushStreamText("停止推送"); - - connectFlag[5] = true; - } + if (!connectFlag[5]) { + // //方式1:命令行推流 + // process = new QProcess(); + // connect(process, &QProcess::readyReadStandardOutput, this, [=]() + // mutable + // { + // QString Output = process->readAllStandardOutput(); + // qDebug() << "Output:" << Output; + // }); + // connect(process, &QProcess::readyReadStandardError, this, [=]() + // mutable { + // QString Error = process->readAllStandardError(); + // qDebug() << "Error Output:" << Error; + // }); + + // // process->start("cmd",QStringList()<<"/c"<<"ffmpeg -i + // // rtmp://liteavapp.qcloud.com/live/liteavdemoplayerstreamid -c copy + // -f flv + // // rtmp://182.92.130.23/app/test"); + + // QStringList m_cmd; + // QString str; + // // str = "ffmpeg -i " + m_DlgGDDCSet->m_playURL1 + " -c copy -f flv " + // + + // // m_DlgGDDCSet->m_pushURL; + // str = "ffmpeg -rtsp_transport tcp -i " + m_DlgGDDCSet->m_playURL1 + " + // -c:v libx264 -c:a copy -f flv " + + // m_DlgGDDCSet->m_pushURL; + // m_cmd << "/c" << str; + // process->start("cmd", m_cmd); + + // //方式2:代码推流 + // if(!connectFlag[0]) + // { + // QMessageBox::information(NULL, tr("提示"), "请先开始连接", + // QMessageBox::Ok); m_DlgGDDCSet->setPushStreamText("推送"); + // return; + // } + + /* ffmpegvideoDlg版本 + ffmpegvideoDlg *videoDlg = ui->WgtffmpegVideo; + videoDlg->setStreamIP(m_DlgGDDCSet->m_playURL1); + videoDlg->setPushStreamIP(m_DlgGDDCSet->m_pushURL); + qDebug() << "DLG:" << m_DlgGDDCSet->m_pushURL; + videoDlg->setPushStream(true); + */ + + ui->WgtffmpegVideo->setPullURL(m_DlgGDDCSet->m_playURL1); + if (!ui->WgtffmpegVideo->pushStream(m_DlgGDDCSet->m_pushURL)) { + g_notifyManager->notify("推流失败!", "", 2, 3000); + }; + m_DlgGDDCSet->setPushStreamText("停止推送"); + + connectFlag[5] = true; + } } // 停止视频推流 void GDDCdlg::stopPushURL() { - if (connectFlag[5]) { - // //方式1:命令行推流 - // if (process != nullptr) { - // process->terminate(); - // process->close(); - // process->kill(); - // // 检查进程退出状态 - // if (process->exitStatus() == QProcess::CrashExit) { - // qDebug() << "Process crashed"; - // } else { - // qDebug() << "Process exited normally"; - // } - // delete process; - - // // 推流进程未自动关闭,手动关闭 - // int pids = GetmPid(L"ffmpeg.exe"); - // qDebug() << "ffmpeg.exe进程的pid为:" << pids; - // if (pids != 0) { - // QStringList m_cmd; - // m_cmd << "/c" << "taskkill /pid " << QString::number(pids) << " - // -f"; QProcess::startDetached("cmd", m_cmd); - // } - // } - - // 方式2:代码推流 - // ui->WgtffmpegVideo->setPushStream(false); - ui->WgtffmpegVideo->stopPushStream(); - m_DlgGDDCSet->setPushStreamText("推送"); - - connectFlag[5] = false; - } + if (connectFlag[5]) { + // //方式1:命令行推流 + // if (process != nullptr) { + // process->terminate(); + // process->close(); + // process->kill(); + // // 检查进程退出状态 + // if (process->exitStatus() == QProcess::CrashExit) { + // qDebug() << "Process crashed"; + // } else { + // qDebug() << "Process exited normally"; + // } + // delete process; + + // // 推流进程未自动关闭,手动关闭 + // int pids = GetmPid(L"ffmpeg.exe"); + // qDebug() << "ffmpeg.exe进程的pid为:" << pids; + // if (pids != 0) { + // QStringList m_cmd; + // m_cmd << "/c" << "taskkill /pid " << QString::number(pids) << " + // -f"; QProcess::startDetached("cmd", m_cmd); + // } + // } + + // 方式2:代码推流 + // ui->WgtffmpegVideo->setPushStream(false); + ui->WgtffmpegVideo->stopPushStream(); + m_DlgGDDCSet->setPushStreamText("推送"); + + connectFlag[5] = false; + } } // 设置页面弹出 void GDDCdlg::pushButtonSet_clicked() { - m_DlgGDDCSet->show(); - m_DlgGDDCSet->activateWindow(); // 置为顶层 + m_DlgGDDCSet->show(); + m_DlgGDDCSet->activateWindow(); // 置为顶层 } // udp数据接收 void GDDCdlg::UDPMessageReceive() { - QByteArray data; - data.resize(udpSocket->pendingDatagramSize()); - QHostAddress addr; - quint16 port; - udpSocket->readDatagram(data.data(), data.size(), &addr, &port); - - // 吊舱状态数据更新 - m_GDDCStateDlg->UDPMessageReceive(data, data.size()); + QByteArray data; + data.resize(udpSocket->pendingDatagramSize()); + QHostAddress addr; + quint16 port; + udpSocket->readDatagram(data.data(), data.size(), &addr, &port); + + // 吊舱状态数据更新 + m_GDDCStateDlg->UDPMessageReceive(data, data.size()); } // 控制页面隐藏与显示 void GDDCdlg::pushButShowCmdPage_clicked() { - if (isCmdPageShow) { - m_GDDCCmdDlg->setVisible(false); - isCmdPageShow = false; - resizeUI(); - ui->pushButShowCmdPage->setIcon(QIcon(":/res/up.png")); - // ui->pushButton->setGeometry(this->width()/2,this->height()-50,50,50); - } else { - m_GDDCCmdDlg->setVisible(true); - isCmdPageShow = true; - resizeUI(); - ui->pushButShowCmdPage->setIcon(QIcon(":/res/down.png")); - // ui->pushButton->setGeometry(this->width()/2,ui->tabWidget->height(),50,50); - } + if (isCmdPageShow) { + m_GDDCCmdDlg->setVisible(false); + isCmdPageShow = false; + resizeUI(); + ui->pushButShowCmdPage->setIcon(QIcon(":/res/left.png")); + // ui->pushButton->setGeometry(this->width()/2,this->height()-50,50,50); + } else { + m_GDDCCmdDlg->setVisible(true); + isCmdPageShow = true; + resizeUI(); + ui->pushButShowCmdPage->setIcon(QIcon(":/res/right.png")); + // ui->pushButton->setGeometry(this->width()/2,ui->tabWidget->height(),50,50); + } } // 状态页面隐藏与显示 void GDDCdlg::pushButShowStatePage_clicked() { - if (isStatePageShow) { - m_GDDCStateDlg->setVisible(false); - isStatePageShow = false; - resizeUI(); - ui->pushButShowStatePage->setIcon(QIcon(":/res/left.png")); - } else { - m_GDDCStateDlg->setVisible(true); - isStatePageShow = true; - resizeUI(); - ui->pushButShowStatePage->setIcon(QIcon(":/res/right.png")); - // ui->pushButton->setGeometry(this->width()/2,ui->tabWidget->height(),50,50); - } + if (isStatePageShow) { + m_GDDCStateDlg->setVisible(false); + isStatePageShow = false; + resizeUI(); + ui->pushButShowStatePage->setIcon(QIcon(":/res/right.png")); + } else { + m_GDDCStateDlg->setVisible(true); + isStatePageShow = true; + resizeUI(); + ui->pushButShowStatePage->setIcon(QIcon(":/res/left.png")); + // ui->pushButton->setGeometry(this->width()/2,ui->tabWidget->height(),50,50); + } } void GDDCdlg::showErrorMessage(QString message, int type) { - g_notifyManager->notify(message, "", type, 3000); + g_notifyManager->notify(message, "", type, 3000); +} + +//鼠标滚轮事件 +void GDDCdlg::wheelEvent(QWheelEvent *event) +{ + if(ui->WgtffmpegVideo->underMouse()) + { + // 获取滚轮的滚动方向和角度增量 + _delta = event->angleDelta().y(); + QPointF currentLocation = event->position(); + // qDebug() << "当前位置:" << currentLocation; + + if (_delta > 0) + { + // 向上滚动 + //qDebug() << "鼠标滚轮向上滚动" << " 步长:" << _delta; + // if(wheelSub->isVisible()) + // { + // wheelSub->hide(); + // } + // wheelPlus->move((currentLocation - QPoint(wheelPlus->width()/2, wheelPlus->height()/2)).toPoint()); + // wheelPlus->show(); + emit wheelSendData(_delta); + } + else if (_delta < 0) + { + // 向下滚动 + // if(wheelPlus->isVisible()) + // { + // wheelPlus->hide(); + // } + // wheelSub->move((currentLocation - QPoint(wheelSub->width()/2, wheelSub->height()/2)).toPoint()); + // wheelSub->show(); + emit wheelSendData(_delta); + //qDebug() << "鼠标滚轮事向下滚动" << " 步长:" << _delta; + } + + if(!_wheelStopTime->isActive()) + { + _wheelStopTime->start(); + } + else + { + _wheelStopTime->stop(); + _wheelStopTime->start(); + } + } + QWidget::wheelEvent(event); } diff --git a/Src/GDDC/gddcdlg.h b/Src/GDDC/gddcdlg.h index 623d4fd..d900383 100644 --- a/Src/GDDC/gddcdlg.h +++ b/Src/GDDC/gddcdlg.h @@ -17,14 +17,17 @@ #include #include -#include "gddcCmdDlg.h" //吊舱控制对话框 +#include "gddcCmdDlg.h" //吊舱控制对话框 #include "global.h" // #include "ui_gddcCmdDlg.h" //吊舱控制对话框ui -#include "gddcStateInfo.h" //吊舱状态信息显示对话框 +#include "gddcStateInfo.h" //吊舱状态信息显示对话框 // #include "ui_gddcStateInfo.h" //吊舱状态信息显示对话框 // #include "ui_gddcSet.h" #include #include +#include +#include +#include #include "QProcess" @@ -34,74 +37,91 @@ class GDDCdlg; } class GDDCdlg : public QWidget { - Q_OBJECT + Q_OBJECT public: - explicit GDDCdlg(QWidget *parent = nullptr); - ~GDDCdlg(); + explicit GDDCdlg(QWidget *parent = nullptr); + ~GDDCdlg(); private: - Ui::GDDCdlg *ui; - QTimer *GDDCControlTimer; + Ui::GDDCdlg *ui; + QTimer *GDDCControlTimer; protected: - void resizeEvent(QResizeEvent *event); + void resizeEvent(QResizeEvent *event); public: - void initWindow(); // 初始化窗口 - void initParam(); // 初始化参数 - void initSignalSlot(); // 初始化信号与槽 - void resizeUI(); // 重新设置布局 - void setGlobalSetMap(std::unordered_map &gSetMap); + void initWindow(); // 初始化窗口 + void initParam(); // 初始化参数 + void initSignalSlot(); // 初始化信号与槽 + void resizeUI(); // 重新设置布局 + void setGlobalSetMap(std::unordered_map &gSetMap); - GDDCSet *m_DlgGDDCSet; // 光电吊舱设置对话框 - GDDCCmdDlg *m_GDDCCmdDlg; // 光电吊舱控制对话框 - GDDCStateInfo *m_GDDCStateDlg; // 光电吊舱状态数据对话框 + GDDCSet *m_DlgGDDCSet; // 光电吊舱设置对话框 + GDDCCmdDlg *m_GDDCCmdDlg; // 光电吊舱控制对话框 + GDDCStateInfo *m_GDDCStateDlg; // 光电吊舱状态数据对话框 public: - // socket对象 - QUdpSocket *udpSocket; - // QString RemoteIP; //目标IP - // QHostAddress RemoteAddr; //目标地址 - // quint16 RemotePort; //目标port - QString localIP; // 本地IP - QHostAddress localAddr; // 本地地址 - quint16 localPort; // 本地port - QProcess *process; // 执行CMD - QThread workerThread; // 线程 - // bool eventFilter(QObject *,QEvent *); //事件过滤器 - void mousePressEvent(QMouseEvent *event); // 事件过滤器 - void mouseMoveEvent(QMouseEvent *event); // 事件过滤器 + // socket对象 + QUdpSocket *udpSocket; + // QString RemoteIP; //目标IP + // QHostAddress RemoteAddr; //目标地址 + // quint16 RemotePort; //目标port + QString localIP; // 本地IP + QHostAddress localAddr; // 本地地址 + quint16 localPort; // 本地port + QProcess *process; // 执行CMD + QThread workerThread; // 线程 + // bool eventFilter(QObject *,QEvent *); //事件过滤器 + void mousePressEvent(QMouseEvent *event) override; // 事件过滤器 + void mouseMoveEvent(QMouseEvent *event) override; // 事件过滤器 + void mouseReleaseEvent(QMouseEvent *event) override; - void startConnectURL1(); - void stopConnectURL1(); - void startConnectURL2(); - void stopConnectURL2(); - void startConnectSerialCtrl(); - void stopConnectSerialCtrl(); - void startConnectUDPCtrl(); - void stopConnectUDPCtrl(); - void startConnectTCPCtrl(); - void stopConnectTCPCtrl(); - void startPushURL(); - void stopPushURL(); + void startConnectURL1(); + void stopConnectURL1(); + void startConnectURL2(); + void stopConnectURL2(); + void startConnectSerialCtrl(); + void stopConnectSerialCtrl(); + void startConnectUDPCtrl(); + void stopConnectUDPCtrl(); + void startConnectTCPCtrl(); + void stopConnectTCPCtrl(); + void startPushURL(); + void stopPushURL(); public: - bool pointSelectionTracking; // 选点跟踪 - bool Is_openVideo; // 视频是否已打开,默认未打开 - std::vector connectFlag; // 0视频流1;1视频流2;2串口通信,3网口通信 - bool isCmdPageShow; // 控制页是否显示 - bool isStatePageShow; // 状态页是否显示 - bool detectionAreaSetting; // 检测区域设置 + bool pointSelectionTracking; // 选点跟踪 + bool Is_openVideo; // 视频是否已打开,默认未打开 + std::vector connectFlag; // 0视频流1;1视频流2;2串口通信,3网口通信 + bool isCmdPageShow; // 控制页是否显示 + bool isStatePageShow; // 状态页是否显示 + bool detectionAreaSetting; // 检测区域设置 public slots: - void GDDCControlTimeOut(); - void startConnect(int); // 开始连接 - void stopConnect(int); // 停止连接 - void UDPMessageReceive(); // udp数据接收 - void pushButtonSet_clicked(); - void pushButShowCmdPage_clicked(); - void pushButShowStatePage_clicked(); + void GDDCControlTimeOut(); + void startConnect(int); // 开始连接 + void stopConnect(int); // 停止连接 + void UDPMessageReceive(); // udp数据接收 + void pushButtonSet_clicked(); + void pushButShowCmdPage_clicked(); + void pushButShowStatePage_clicked(); + + void showErrorMessage(QString message, int type); - void showErrorMessage(QString message, int type); +protected: + void wheelEvent(QWheelEvent* event) override; +private: + int _delta; //滚轮滚动量 + QTimer *_wheelStopTime; + QPointF _dragStartPositon; //记录滑动操作当前点击的局部坐标 + bool _dragFlag; //记录滑动初始标志 + bool _moveFlag; //记录正在滑动中的标志 + QLabel* firstLocation; + QLabel* lastLocation; + // QPointF _currentLocation; //记录鼠标当前位置 + QLabel* wheelPlus; //鼠标+图标 + QLabel* wheelSub; //鼠标-图标 +signals: + void wheelSendData(int value); }; -#endif // GDDCDLG_H +#endif // GDDCDLG_H diff --git a/Src/GDDC/res.qrc b/Src/GDDC/res.qrc new file mode 100644 index 0000000..55b2660 --- /dev/null +++ b/Src/GDDC/res.qrc @@ -0,0 +1,13 @@ + + + Pod/podDown.png + Pod/podLeft.png + Pod/podRight.png + Pod/podUp.png + Pod/Center.png + Pod/c.png + Pod/circle.png + Pod/plus.png + Pod/sub.png + + diff --git a/Src/Video/cffmpeg_decode.cpp b/Src/Video/cffmpeg_decode.cpp index d635d5a..051bcd8 100644 --- a/Src/Video/cffmpeg_decode.cpp +++ b/Src/Video/cffmpeg_decode.cpp @@ -85,7 +85,7 @@ bool Cffmpeg_decode::open_input_file() { // av_dict_set(&avdic, "listen_timeout", "200000", 0); // 在尝试连接到一个流或网络资源时,等待的最长时间。如果在这个时间内无法建立连接,就会返回超时错误 av_dict_set(&avdic, "stimeout", "5000000", 0); // 设置超时5秒 - // av_dict_set(&avdic, "max_delay", "300000", 0); // 设置最大时延300ms + av_dict_set(&avdic, "max_delay", "300000", 0); // 设置最大时延300ms av_dict_set(&avdic, "tune", "zerolatency", 0); // 实时编码 av_dict_set(&avdic, "preset", "ultrafast", 0); // faster // av_dict_set(&avdic, "threads", "auto", 0); // 自动开启线程数 diff --git a/Src/VideoGL/videowidget.cpp b/Src/VideoGL/videowidget.cpp index 2de644d..3bf47e9 100644 --- a/Src/VideoGL/videowidget.cpp +++ b/Src/VideoGL/videowidget.cpp @@ -572,3 +572,8 @@ void VideoWidget::receiveErrorMessage(QString message, int type) { // qDebug() << "receive message:" << message; emit sendErrorMessageSignal(message, type); } + +QSizeF VideoWidget::getCurImgSize() +{ + return m_zoomSize; +} diff --git a/Src/VideoGL/videowidget.h b/Src/VideoGL/videowidget.h index 235e89f..b3c67e5 100644 --- a/Src/VideoGL/videowidget.h +++ b/Src/VideoGL/videowidget.h @@ -113,6 +113,8 @@ private: signals: void startPullSignal(); void sendErrorMessageSignal(QString message, int type); +public: + QSizeF getCurImgSize(); }; #endif // VIDEOWIDGET_H diff --git a/main.cpp b/main.cpp index 0432eee..002d08c 100644 --- a/main.cpp +++ b/main.cpp @@ -2,12 +2,13 @@ #include #include #include - +#include #include "mainwindow.h" int main(int argc, char *argv[]) { // QApplication::setAttribute(Qt::AA_UseOpenGLES); // qputenv("QTWEBENGINE_CHROMIUM_FLAGS", "--enable-gpu-rasterization"); + QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL); QApplication a(argc, argv); QTranslator translator; const QStringList uiLanguages = QLocale::system().uiLanguages();