New file |
| | |
| | | #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 ç§ |
| | | } |