【QT】视频播放+文件选择

折腾了两个小时,太久没用了,找了半天的感觉。

先是在视频播放 的代码基础上加选择视频的按钮,开始总是显示两个框,后来发现需要用QSplitter来实现同时有多个框的情况。

把中心窗口设为这个splitter就可以了:setCentralWidget(splitter); 注意,这里不能用layout.

再然后是槽, 我直接写slots: 就报错, 写 private slots:就是对的。 注意槽函数一定要声明在slots里。

文件选择用QFileDialog::getOpenFileName();

每个控件都是在类里面先声明一个相应的指针,然后在函数中具体分配设置。信号与槽的连接也是在构造函数中的。

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow()
{
    playlist = new QMediaPlaylist;
    player = new QMediaPlayer;
    videoWidget = new QVideoWidget;

    chooseVideoButton = new QPushButton(tr("Choose Video"));
    QSplitter * splitter = new QSplitter;
    splitter->addWidget(videoWidget);
    splitter->addWidget(chooseVideoButton);

    setCentralWidget(splitter);

    connect(chooseVideoButton, SIGNAL(clicked()), this, SLOT(getVideoName()));


    videoWidget->show();

}

void MainWindow::getVideoName()
{
    fileName = QFileDialog::getOpenFileName(this,
        tr("Open Video"), "E:", tr("Video Files (*.avi)"));
    playlist->addMedia(QUrl::fromLocalFile(fileName));
    playlist->setCurrentIndex(1);
    player->setPlaylist(playlist);
    player->setVideoOutput(videoWidget);
    player->play();
}

MainWindow::~MainWindow()
{

}

 

 

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QVideoWidget>
#include <QUrl>
#include <QPushButton>
#include <QFileDialog>
#include <QLayout>
#include <QSplitter>

class MainWindow : public QMainWindow
{
    Q_OBJECT

private slots:
    void getVideoName();
public:
    QMediaPlaylist * playlist;
    QMediaPlayer * player;
    QVideoWidget * videoWidget;

    QString fileName;
    QPushButton * chooseVideoButton;

    MainWindow();
    ~MainWindow();

};

#endif // MAINWINDOW_H

 

 

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值