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

 

posted @ 2015-04-02 21:24  匡子语  阅读(1481)  评论(0编辑  收藏  举报