From c54475f3335a28b7a2acff9a2f9d63a461ce215a Mon Sep 17 00:00:00 2001
From: h1544216712 <h1544216712@163.comgit config --list>
Date: 星期五, 21 二月 2025 16:32:12 +0800
Subject: [PATCH] 韩123

---
 Client/董澎韬/code/facexmainwindow.cpp |  241 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 241 insertions(+), 0 deletions(-)

diff --git "a/Client/\350\221\243\346\276\216\351\237\254/code/facexmainwindow.cpp" "b/Client/\350\221\243\346\276\216\351\237\254/code/facexmainwindow.cpp"
new file mode 100644
index 0000000..c2e6294
--- /dev/null
+++ "b/Client/\350\221\243\346\276\216\351\237\254/code/facexmainwindow.cpp"
@@ -0,0 +1,241 @@
+#include "facexmainwindow.h"
+#include "ui_facexmainwindow.h"
+
+#include <QMessageBox>
+#include <QStringList>
+#include <QFileDialog>
+#include <QGuiApplication>
+#include <QScreen>
+#include <QException>
+#include <QThread>
+#include <QWheelEvent>
+
+FaceXMainWindow::FaceXMainWindow(QWidget *parent) :
+    QMainWindow(parent),
+    ui(new Ui::FaceXMainWindow),
+    m_player(new QMediaPlayer),
+    m_playerlist(new QMediaPlaylist),
+    m_videowidget(new QVideoWidget(this)),
+    m_ffmpeg(new QFFmpeg(this)),
+    m_rtspThread(nullptr)
+{
+    ui->setupUi(this);
+    //璁剧疆鍙Щ鍔ㄥ尯鍩�
+    dragArea = QRect(0, 0, width(), 40);
+    setWindowFlags(Qt::FramelessWindowHint);//闅愯棌杈规
+    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+
+    // 璁剧疆鎾斁鎸夐挳鍥炬爣涓烘挱鏀惧浘鏍�
+    ui->btn_play->setStyleSheet("border-image: url(:/image/start.png)");
+
+    //璁剧疆鎾斁鍣ㄦ挱鏀鹃槦鍒�
+    m_player->setPlaylist(m_playerlist);
+    //璁剧疆鎾斁鍣ㄦ樉绀虹獥鍙�
+    m_player->setVideoOutput(m_videowidget);
+    // 璁剧疆鎾斁鍣ㄦ樉绀虹獥鍙�
+    m_videowidget->resize(ui->label_video->size());
+    m_videowidget->move(ui->label_video->pos());
+    m_videowidget->show();
+    ui->label_video->hide();
+
+    // 杩炴帴 QFFmpeg 鐨勪俊鍙�
+    connect(m_ffmpeg, &QFFmpeg::GetImage, this, &FaceXMainWindow::SetImage, Qt::QueuedConnection);
+
+    // 杩炴帴鎾斁鍣ㄧ殑閿欒淇″彿
+    connect(m_player, QOverload<QMediaPlayer::Error>::of(&QMediaPlayer::error), this, [this](QMediaPlayer::Error error) {
+        QMessageBox::critical(this, "鎾斁閿欒", m_player->errorString());
+    });
+
+    // 杩炴帴鎾斁鍣ㄧ殑浣嶇疆鏇存柊淇″彿
+    connect(m_player, &QMediaPlayer::positionChanged, this, &FaceXMainWindow::updateSliderPosition);
+    connect(ui->horizontalSlider, &QSlider::sliderMoved, this, &FaceXMainWindow::on_sliderPosition_valueChanged);
+
+}
+
+FaceXMainWindow::~FaceXMainWindow()
+{
+    if (m_rtspThread && m_rtspThread->isRunning()) {
+        m_rtspThread->quit();
+        m_rtspThread->wait();
+    }
+    delete ui;
+}
+
+void FaceXMainWindow::mousePressEvent(QMouseEvent *event)
+{
+    if (dragArea.contains(event->pos())) {
+        offset = event->globalPos() - pos();
+        isDragging = true;
+    }
+}
+
+void FaceXMainWindow::mouseMoveEvent(QMouseEvent *event)
+{
+    if (isDragging && dragArea.contains(event->pos())) {
+        move(event->globalPos() - offset);
+    }
+}
+
+void FaceXMainWindow::mouseReleaseEvent(QMouseEvent *event)
+{
+    isDragging = false;
+}
+
+//鏌ヨ鎸夐挳
+void FaceXMainWindow::on_btnSelect_clicked()
+{
+    QDate dateStart = ui->dateStart->date();
+    QDate dateEnd = ui->dateEnd->date();
+
+    if (dateStart > dateEnd) {
+        QMessageBox::critical(nullptr, "閿欒", "寮�濮嬫椂闂翠笉鑳藉ぇ浜庣粨鏉熸椂闂�!");
+        return;
+    }
+
+    //灏嗘棩鏈熻浆鎹负鏃ユ湡鏃堕棿璁$畻鐩稿樊鐨勫ぉ鏁�,瓒呰繃60澶╁垯鎻愮ず涓嶇敤缁х画
+    QDateTime dateTimeStart = ui->dateStart->dateTime();
+    QDateTime dateTimeEnd = ui->dateEnd->dateTime();
+    if (dateTimeStart.daysTo(dateTimeEnd) >= 60) {
+        QMessageBox::critical(nullptr, "閿欒", "姣忔鏈�澶у彧鑳芥煡璇�60澶╁唴!");
+        return;
+    }
+
+    QStringList fileNames = QFileDialog::getOpenFileNames(this, "閫夋嫨鏂囦欢", "D:/", "瑙嗛鏂囦欢 (*.mp4 *.avi *.mov);;鎵�鏈夋枃浠� (*.*)");
+    if (!fileNames.isEmpty()) {
+        m_playerlist->clear();
+        m_ffmpeg->SetUrl(fileNames.first());
+        if (m_ffmpeg->Init()) {
+            if (m_rtspThread && m_rtspThread->isRunning()) {
+                m_rtspThread->quit();
+                m_rtspThread->wait();
+            }
+            m_rtspThread = new RtspThread(m_ffmpeg, this);
+            m_rtspThread->start();
+        }
+        QMessageBox::information(this, "鎴愬姛", "鏂囦欢宸叉坊鍔犲埌鎾斁鍒楄〃");
+    } else {
+        QMessageBox::information(this, "鎻愮ず", "鏈�夋嫨浠讳綍鏂囦欢");
+    }
+}
+
+//闅愯棌绐楀彛鎸夐挳
+void FaceXMainWindow::on_toolButton_clicked()
+{
+    hide();
+}
+
+//鏈�灏忓寲鎸夐挳
+void FaceXMainWindow::on_toolButton_3_clicked()
+{
+    showMinimized();
+}
+
+//鏈�澶у寲鎸夐挳
+void FaceXMainWindow::on_toolButton_2_clicked()
+{
+    if(windowState() != Qt::WindowMaximized)
+    {
+        this->showMaximized();
+    }
+    else
+    {
+        this->showNormal();
+    }
+}
+
+//榧犳爣鍙屽嚮鏈�澶у寲
+void FaceXMainWindow::mouseDoubleClickEvent(QMouseEvent *event)
+{
+    if(windowState() != Qt::WindowMaximized)
+    {
+        this->showMaximized();
+    }
+    else
+    {
+        this->showNormal();
+    }
+}
+
+void FaceXMainWindow::setPlayButtonIcon(bool isPlaying)
+{
+    if (isPlaying) {
+        ui->btn_play->setStyleSheet("border-image: url(:/image/pause.png)");
+    } else {
+        ui->btn_play->setStyleSheet("border-image: url(:/image/start.png)");
+    }
+}
+
+void FaceXMainWindow::playOrPause()
+{
+    isPlaying = !isPlaying;
+    if (isPlaying) {
+        m_player->play();
+        ui->btn_play->setStyleSheet("border-image: url(:/image/pause.png)");
+    } else {
+        m_player->pause();
+        ui->btn_play->setStyleSheet("border-image: url(:/image/start.png)");
+    }
+}
+
+//鎾斁鎸夐挳
+void FaceXMainWindow::on_btn_play_clicked()
+{
+    if (m_ffmpeg) {
+        if (!m_rtspThread || !m_rtspThread->isRunning()) {
+            if (m_ffmpeg->Init()) {
+                m_rtspThread = new RtspThread(m_ffmpeg, this);
+                m_rtspThread->start();
+            }
+        }
+        playOrPause();
+    } else {
+        QMessageBox::critical(this, "閿欒", "鎾斁鍣ㄦ湭鍒濆鍖�");
+    }
+}
+
+//鎴浘鎸夐挳
+void FaceXMainWindow::on_btn_cut_clicked()
+{
+    QScreen *screen = QGuiApplication::primaryScreen();
+    if (screen) {
+        QPixmap screenshot = screen->grabWindow(this->winId());
+        screenshot.save("screenshot.png");
+        QMessageBox::information(this, "鎻愮ず", "鎴浘宸蹭繚瀛樹负 screenshot.png");
+    }
+}
+
+void FaceXMainWindow::SetImage(const QImage &image)
+{
+    if (!image.isNull()) {
+        ui->label_video->setScaledContents(true); // 璁剧疆鍥惧儚鑷姩缂╂斁
+        ui->label_video->setPixmap(QPixmap::fromImage(image));
+        ui->label_video->adjustSize();
+        ui->label_video->update();
+    } else {
+        qDebug() << "鎺ユ敹鍒扮殑鍥惧儚涓虹┖";
+    }
+}
+
+//鏇存柊婊戝潡鐨勪綅缃�
+void FaceXMainWindow::updateSliderPosition()
+{
+    ui->horizontalSlider->setValue(m_player->position());
+}
+
+//鎷栧姩婊戝潡鏉ユ帶鍒舵挱鏀捐繘搴�
+void FaceXMainWindow::on_sliderPosition_valueChanged(int value)
+{
+    m_player->setPosition(value);
+}
+
+void FaceXMainWindow::on_btn_back_clicked()
+{
+    int currentPosition = m_player->position();
+    m_player->setPosition(currentPosition - 10000); // 鍚庨�� 10 绉�
+}
+
+void FaceXMainWindow::on_btn_forward_clicked()
+{
+    int currentPosition = m_player->position();
+    m_player->setPosition(currentPosition + 10000); // 鍓嶈繘 10 绉�
+}

--
Gitblit v1.8.0