一、环境介绍
操作系统介绍:win10 64位
QT版本: 5.12.6
编译器: MinGW32
FFMPEG: 4.2.2
下载地址:
二、软件效果
三、核心代码
3.1 widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
ui->plainTextEdit->setReadOnly(true);
this->setWindowTitle("获取媒体文件信息(支持拖动文件到窗口里)");
setAcceptDrops(true);
}
Widget::~Widget()
{
delete ui;
}
/*
工程: GetMediaInformation
日期: 2021-07-23
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 选择路径
*/
void Widget::on_pushButton_select_clicked()
{
QString filename=QFileDialog::getOpenFileName(this,"选择打开的文件","C:/",tr("*.*"));
//filename==选择文件的绝对路径
LoadName(filename);
}
/*
工程: GetMediaInformation
日期: 2021-07-23
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 传入媒体名称
*/
void Widget::LoadName(QString in_file)
{
if(!in_file.isEmpty())
{
ui->lineEdit_info->setText(in_file);
QString json=MediainFormation(in_file);
ui->plainTextEdit->clear();
ui->plainTextEdit->insertPlainText(json);
}
}
/*
工程: GetMediaInformation
日期: 2021-07-23
作者: DS小龙哥
环境: win10 QT5.12.6 MinGW32
功能: 获取媒体信息
*/
QString Widget::MediainFormation(QString in_file)
{
QString ffmpeg_path=QCoreApplication::applicationDirPath();
//QString strCmd="C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffprobe.exe -v quiet -of json -i D:/jiyi.mp4 -show_streams";
ffmpeg_path+="ffmpeg422/";
QString strCmd=QString("ffmpeg422/ffprobe.exe -v quiet -of json -i \"%1\" -show_streams").arg(in_file);
qDebug()<<"strCmd:"<<strCmd;
QProcess process;
// process.setWorkingDirectory(ffmpeg_path);
// process.setReadChannel(QProcess::StandardOutput);
process.start(strCmd);
process.waitForFinished();
return process.readAll();
}
void Widget::dragEnterEvent(QDragEnterEvent *e)
{
if (e->mimeData()->hasUrls())
{
e->acceptProposedAction();
}
}
void Widget::dropEvent(QDropEvent *e)
{
foreach (const QUrl &url, e->mimeData()->urls())
{
QString fileName = url.toLocalFile();
LoadName(fileName);
}
}
3.2 widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QFileDialog>
#include <QProcess>
#include <QCoreApplication>
#include <QDebug>
#include <QDragEnterEvent>
#include <QUrl>
#include <QMimeData>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
QString MediainFormation(QString in_file);
void LoadName(QString in_file);
private slots:
void on_pushButton_select_clicked();
protected:
void dragEnterEvent(QDragEnterEvent *e);
void dropEvent(QDropEvent *e);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H