【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();

}

 

你可能感兴趣的:(qt)