好的,下面是逐行代码解释:
#include "videoplayer.h"
#include "ui_videoplayer.h"
这两行是引入头文件。
VideoPlayer::VideoPlayer(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::VideoPlayer)
{
ui->setupUi(this);
这里定义了一个名为VideoPlayer
的类,继承自QMainWindow
类,用于实现视频播放器的主窗口界面。在构造函数中,首先调用了基类的构造函数,并初始化了UI界面。
player=new QMediaPlayer(this);
player->setNotifyInterval(1000);
这里创建了一个QMediaPlayer
对象,并设置每隔1秒发送一次状态改变信号(默认值为10000毫秒)。
QGraphicsScene *scene=new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
videoItem=new QGraphicsVideoItem;
videoItem->setSize(QSizeF(400,480));
scene->addItem(videoItem);
player->setVideoOutput(videoItem);
这里创建了一个QGraphicsScene
对象和一个QGraphicsVideoItem
对象,将后者添加到场景中,并将场景设置给UI上的graphicsView控件。然后将该图形项指定给媒体播放器以作为其输出设备。
connect(player,SIGNAL(positionChanged(qint64)),this, SLOT(onPositionChanged(qint64)));
connect(player,SIGNAL(durationChanged(qint64)),this, SLOT(onDurationChanged(qint64)));
这里使用Qt提供的信号与槽机制来连接QMediaPlayer
对象的positionChanged()
和durationChanged()
信号与当前类中的槽函数onPositionChanged(qint64)
和onDurationChanged(qint64)
。
void VideoPlayer::on_pushButton_Add_clicked()
{
QString currentpath=QDir::homePath(); // 获取系统当前目录
QString chooseTitle="请选择视频文件"; // 打开文件对话框标题名称
QString files=QFileDialog::getOpenFileName(this,chooseTitle,currentpath);
if(files.isEmpty())
{
QMessageBox::critical(this,"错误","打开视频文件失败,请重新检查?",QMessageBox::Yes);
return;
}
QFileInfo fileInfos(files); // 用QFileInfo类获取文件信息
ui->labelCurrentMdia->setText(fileInfos.fileName());
player->setMedia(QUrl::fromLocalFile(files));// QUrl对象传递给player->setMedia()方法,从而指定要播放的媒体源
player->play();
这里定义了一个名为on_pushButton_Add_clicked()
的槽函数,当用户点击添加按钮时将调用该函数。该函数使用Qt提供的文件对话框选择器来让用户选择要播放的视频文件,并将其路径存储到字符串变量files中。如果用户没有选中任何文件,则显示错误提示并返回。如果成功选中了一个文件,代码会调用QMediaPlayer对象的setMedia()方法来指定媒体源,并开始播放。
void VideoPlayer::on_pushButton_Sound_clicked()
{
bool flag=player->isMuted();
player->setMuted(!flag);
if(flag)
ui->pushButton_Sound->setIcon(QIcon(":/new/prefix1/soundmax.png"));
else
ui->pushButton_Sound->setIcon(QIcon(":/new/prefix1/soundmin.png"));
}
这里定义了一个名为on_pushButton_Sound_clicked()
的槽函数,当用户点击声音按钮时将调用该函数。该函数使用QMediaPlayer对象的isMuted()方法来获取当前播放器是否静音,并通过setMuted()方法来切换播放器的静音状态。根据当前状态,代码会设置相应的图标。
void VideoPlayer::on_pushButton_Delete_clicked()
{
int row = ui->tableWidget_history->currentRow();
if (row >= 0) {
// 显示确认消息框
QMessageBox::StandardButton confirm;
confirm = QMessageBox::question(this, "警告!", "确定要删除此条记录?",QMessageBox::Yes | QMessageBox::No);
if (confirm == QMessageBox::Yes) {
// 删除所选行
ui->tableWidget_history->removeRow(row);
// 从历史记录列表中删除相应的文件路径
historyList.removeAt(row);
}
}
}
这里定义了一个名为on_pushButton_Delete_clicked()
的槽函数,当用户点击删除按钮时将调用该函数。如果用户选择了一行历史记录,则代码会显示一个确认消息框并提示用户确认是否要删除该记录。如果用户点击”是”,则代码会从表格中删除所选行,并从历史记录列表中删除对应项。
以上就是该程序主要部分的逐行解释。