You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
PayloadAPP/Src/GDDC/gddcdlg.cpp

809 lines
24 KiB
C++

#include "gddcdlg.h"
#include <windows.h>
#include <wtsapi32.h>
#include <QDateTime>
#include <QDir>
#include <QNetworkInterface>
#include <QTabBar>
#include <QTabWidget>
#include <iostream>
#include <QPixmap>
#include "ui_gddcdlg.h"
#include <QWidget>
#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;
}
}
WTSFreeMemory(wts);
}
#define CONFIG_PATH "config.ini"
#define CMDPAGEWIDTH 380
#define STATEPAGEWIDTH 250
GDDCdlg::GDDCdlg(QWidget *parent) : QWidget(parent), ui(new Ui::GDDCdlg) {
ui->setupUi(this);
initWindow();
initParam();
initSignalSlot();
}
GDDCdlg::~GDDCdlg() {
// 停止所有通信
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/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 = 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<bool>::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;
}
}
// 槽函数停止连接
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;
}
}
// bool GDDCdlg::eventFilter(QObject *watched, QEvent *event)
// {
// qDebug() << this->geometry().x();
// qDebug() << this->geometry().y();
// QPoint sPoint2=QCursor::pos();
// qDebug()<<"相对于屏幕坐标2:"<<"("<<sPoint2.rx()<<","<<sPoint2.ry()<<")";
// QPoint windowPoint=this->mapFromGlobal(sPoint2);
// qDebug()<<"相对于窗口坐标:"<<"("<<windowPoint.rx()<<","<<windowPoint.ry()<<")";
// return true;
// }
// 鼠标左键
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(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:"<<"("<<sPoint1.rx()<<","<<sPoint1.ry()<<")";
QPointF sPoint2 = QCursor::pos();
// qDebug()<<"相对于屏幕坐标2:"<<"("<<sPoint2.rx()<<","<<sPoint2.ry()<<")";
QPointF windowPoint = this->mapFromGlobal(sPoint2);
// qDebug()<<"相对于窗口坐标:"<<"("<<windowPoint.rx()<<","<<windowPoint.ry()<<")";
QPointF widgetPoint = ui->WgtffmpegVideo->mapFromGlobal(sPoint1);
// qDebug()<<"相对于控件坐标:"<<"("<<widgetPoint.rx()<<","<<widgetPoint.ry()<<")";
// 更新LineEdit信息
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(_dragFlag)//点击并且移动
{
QPointF diff = event->pos() - _dragStartPositon;
qDebug() << "x:" << diff.x() <<"y:" <<diff.y();
m_GDDCCmdDlg->setMoveParm(diff);
if(qAbs(diff.x()) > 5 || qAbs(diff.y()) >5)//像素点超过5ptx才算移动否则为跟踪
{
_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();
}
QPointF widgetPos = mapFromGlobal(event->globalPosition());
//如果移动的时候超过了画面显示区域,则自动退出伺服控制
if(!ui->WgtffmpegVideo->rect().contains(widgetPos.toPoint()))
{
_moveFlag = false;
std::byte buffer[10] = {static_cast<std::byte>(0)};
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;
// 发送3次
m_GDDCCmdDlg->sendCurDate(buffer, 3);
firstLocation->hide();
lastLocation->hide();
}
}
}
void GDDCdlg::mouseReleaseEvent(QMouseEvent *event)
{
if(ui->WgtffmpegVideo->underMouse())
{
if(event->button() == Qt::LeftButton && _moveFlag)
{
_moveFlag = false;
std::byte buffer[10] = {static_cast<std::byte>(0)};
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;
// 发送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::resizeEvent(QResizeEvent *event) {
resizeUI(); // 重新设置布局
}
// 重新设置布局
void GDDCdlg::resizeUI() {
/* -------------->x
* | (0,0)
* |
* |
* |
* |
* y
*/
double GDDCPageHeight = (double)(this->height());
double GDDCPageWidth = (double)(this->width());
// qDebug()<<"宽度,高度:"<<GDDCPageHeight<<GDDCPageWidth;
/******控制区位置和大小设置*****/
double cmdAreaHeight = 0;
double cmdAreaWidth = 0;
if (isCmdPageShow) {
cmdAreaWidth = CMDPAGEWIDTH;
cmdAreaHeight = GDDCPageHeight;
}
m_GDDCCmdDlg->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<QString, settingStruct> &gSetMap) {
if (m_DlgGDDCSet) {
m_DlgGDDCSet->initPullURL(gSetMap["Pod"].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->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);
};
}
}
// 关闭视频1
void GDDCdlg::stopConnectURL1() {
if (connectFlag[0]) {
connectFlag[0] = false;
// ui->WgtffmpegVideo->setPlayVideo(false);
ui->WgtffmpegVideo->stopPlay();
}
}
// 播放视频2
void GDDCdlg::startConnectURL2() {
if (!connectFlag[1]) {
connectFlag[1] = true;
}
}
// 关闭视频2
void GDDCdlg::stopConnectURL2() {
if (connectFlag[1]) {
connectFlag[1] = false;
}
}
void GDDCdlg::startConnectSerialCtrl() {
if (!connectFlag[2]) {
connectFlag[2] = true;
}
}
void GDDCdlg::stopConnectSerialCtrl() {
if (connectFlag[2]) {
connectFlag[2] = false;
}
}
// 开始UDP控制通信
void GDDCdlg::startConnectUDPCtrl() {
if (!connectFlag[3]) {
/*启动定时器*/
GDDCControlTimer = new QTimer();
GDDCControlTimer->setInterval(40);
connect(GDDCControlTimer, &QTimer::timeout, this,
[=]() { GDDCControlTimeOut(); });
GDDCControlTimer->start();
// 创建udp socket对象
udpSocket = new QUdpSocket(this);
/*接收*/
// QList<QHostAddress> 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;
}
}
// 开始TCP控制通信
void GDDCdlg::startConnectTCPCtrl() {
if (!connectFlag[4]) {
connectFlag[4] = true;
}
}
// 停止TCP控制通信
void GDDCdlg::stopConnectTCPCtrl() {
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;
}
}
// 停止视频推流
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;
}
}
// 设置页面弹出
void GDDCdlg::pushButtonSet_clicked() {
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());
}
// 控制页面隐藏与显示
void GDDCdlg::pushButShowCmdPage_clicked() {
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/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);
}
//鼠标滚轮事件
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);
}