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