165 lines
5.0 KiB
C++
165 lines
5.0 KiB
C++
|
#include "mainwindow.h"
|
||
|
#include "./ui_mainwindow.h"
|
||
|
#include <QFileDialog>
|
||
|
#include <QFileInfo>
|
||
|
#include <iostream>
|
||
|
|
||
|
using namespace std;
|
||
|
MainWindow::MainWindow(QWidget *parent)
|
||
|
: QMainWindow(parent), ui(new Ui::MainWindow)
|
||
|
{
|
||
|
ui->setupUi(this);
|
||
|
// 选择修改分辨率
|
||
|
connect(ui->en_mdf_res, SIGNAL(stateChanged(int)), this, SLOT(en_mdf_res_state_change(int)));
|
||
|
en_mdf_res_state_change(Qt::Unchecked);
|
||
|
// bt_browse_press
|
||
|
connect(ui->bt_browse, SIGNAL(clicked()), this, SLOT(press_bt_browse()));
|
||
|
// bt_start_change
|
||
|
connect(ui->bt_start_change, SIGNAL(clicked()), this, SLOT(ffmpeg_run()));
|
||
|
//ffmpeg_info
|
||
|
connect(&ffmpeg_process, SIGNAL(readyReadStandardOutput()), this, SLOT(ffmpeg_info_read()));
|
||
|
// def_cfg
|
||
|
connect(ui->bt_def_cfg, SIGNAL(clicked()), this, SLOT(def_cfg()));
|
||
|
// hor_change
|
||
|
connect(ui->bt_hor_change, SIGNAL(clicked()), this, SLOT(hor_change_event()));
|
||
|
// ver_change
|
||
|
connect(ui->bt_ver_change, SIGNAL(clicked()), this, SLOT(ver_change_event()));
|
||
|
}
|
||
|
void MainWindow::hor_change_event()
|
||
|
{
|
||
|
ui->hor_val->setText("-1");
|
||
|
}
|
||
|
void MainWindow::ver_change_event()
|
||
|
{
|
||
|
ui->ver_val->setText("-1");
|
||
|
}
|
||
|
void MainWindow::ffmpeg_info_read()
|
||
|
{
|
||
|
cout << "ffmpeg_info_read" << endl;
|
||
|
QString ffmpeg_info = ffmpeg_process.readAllStandardOutput();
|
||
|
if (ffmpeg_info.isEmpty())
|
||
|
{
|
||
|
cout << "No output from ffmpeg" << endl;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
ui->lb_info->setText(ffmpeg_info);
|
||
|
ui->lb_info->repaint();
|
||
|
cout << "ffmpeg_info: " << ffmpeg_info.toStdString() << endl;
|
||
|
}
|
||
|
}
|
||
|
void MainWindow::def_cfg(){
|
||
|
en_mdf_res_state_change(Qt::Checked);
|
||
|
ui->en_mdf_res->setChecked(true);
|
||
|
ui->hor_val->setText("640");
|
||
|
ui->ver_val->setText("-1");
|
||
|
ui->cb_fps_change->setChecked(true);
|
||
|
ui->le_fps_val->setText("5");
|
||
|
}
|
||
|
void MainWindow::ffmpeg_run()
|
||
|
{
|
||
|
cout << "ffmpeg_run" << endl;
|
||
|
// deal cmd
|
||
|
QString cmd = "./ffmpeg.exe -i ";
|
||
|
if (ui->le_src_file->text().isEmpty())
|
||
|
{
|
||
|
cout << "src file is empty" << endl;
|
||
|
return;
|
||
|
}
|
||
|
cmd += ui->le_src_file->text();
|
||
|
if (ui->cb_fps_change->isChecked())
|
||
|
{
|
||
|
cmd += " -r ";
|
||
|
cmd += ui->le_fps_val->text();
|
||
|
}
|
||
|
if (ui->en_mdf_res->isChecked())
|
||
|
{
|
||
|
cmd += " -vf scale=";
|
||
|
cmd += ui->hor_val->text();
|
||
|
cmd += ":";
|
||
|
cmd += ui->ver_val->text();
|
||
|
}
|
||
|
if (ui->le_dest_file->text().isEmpty())
|
||
|
{
|
||
|
cout << "dest file is empty" << endl;
|
||
|
return;
|
||
|
}
|
||
|
cmd += " ";
|
||
|
cmd += ui->le_dest_file->text();
|
||
|
cmd += ui->cb_dest_file_end->currentText();
|
||
|
cout << "cmd: " << cmd.toStdString() << endl;
|
||
|
|
||
|
|
||
|
ffmpeg_process.setProcessChannelMode(QProcess::MergedChannels);
|
||
|
ffmpeg_process.start(cmd);
|
||
|
if (!ffmpeg_process.waitForStarted())
|
||
|
{
|
||
|
cout << "ffmpeg_run failed to start" << endl;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
while (!ffmpeg_process.waitForFinished())
|
||
|
{
|
||
|
// QString ffmpeg_info = ffmpeg_process.readAll();
|
||
|
// cout << "ffmpeg_info: " << ffmpeg_info.toStdString() << endl;
|
||
|
// ui->lb_info->setText(ffmpeg_info);
|
||
|
// _sleep(1);
|
||
|
}
|
||
|
|
||
|
QMessageBox::information(this, "提示", "转换完成!");
|
||
|
// QString ffmpeg_info = ffmpeg_process.readAllStandardOutput();
|
||
|
// if (ffmpeg_info.isEmpty())
|
||
|
// {
|
||
|
// cout << "No output from ffmpeg" << endl;
|
||
|
// }
|
||
|
// else
|
||
|
// {
|
||
|
// ui->lb_info->setText(ffmpeg_info);
|
||
|
// cout << "ffmpeg_info: " << ffmpeg_info.toStdString() << endl;
|
||
|
// }
|
||
|
}
|
||
|
MainWindow::~MainWindow()
|
||
|
{
|
||
|
delete ui;
|
||
|
}
|
||
|
|
||
|
void MainWindow::en_mdf_res_state_change(int state)
|
||
|
{
|
||
|
cout << "en_mdf_res_state_change" << endl;
|
||
|
if (state == Qt::Checked)
|
||
|
{
|
||
|
this->ui->hor_val->setFocusPolicy(Qt::StrongFocus);
|
||
|
this->ui->hor_val->setEnabled(true);
|
||
|
this->ui->hor_val->setStyleSheet("background-color: white;");
|
||
|
this->ui->ver_val->setFocusPolicy(Qt::StrongFocus);
|
||
|
this->ui->ver_val->setEnabled(true);
|
||
|
this->ui->ver_val->setStyleSheet("background-color: white;");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
this->ui->hor_val->setFocusPolicy(Qt::NoFocus);
|
||
|
this->ui->hor_val->setEnabled(false);
|
||
|
this->ui->hor_val->setText("");
|
||
|
this->ui->hor_val->setStyleSheet("background-color: gray;");
|
||
|
this->ui->ver_val->setFocusPolicy(Qt::NoFocus);
|
||
|
this->ui->ver_val->setEnabled(false);
|
||
|
this->ui->ver_val->setText("");
|
||
|
this->ui->ver_val->setStyleSheet("background-color: gray;");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void MainWindow::press_bt_browse()
|
||
|
{
|
||
|
QString select_file = QFileDialog::getOpenFileName(this, tr("选择一个目录"), tr("*.*"));
|
||
|
|
||
|
if (!select_file.isEmpty())
|
||
|
{
|
||
|
// 用户选择了一个目录,处理选择的路径
|
||
|
// 这里可以是输出到控制台或其他操作
|
||
|
ui->le_src_file->setText(select_file);
|
||
|
QFileInfo file_info(select_file);
|
||
|
QString baseName = file_info.completeBaseName(); // 获取不带扩展名的文件名
|
||
|
ui->le_dest_file->setText(file_info.path()+tr("/")+baseName);
|
||
|
}
|
||
|
}
|