• 【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();
    }
  • 相关阅读:
    常用设计模式:装饰者模式
    常用数据结构算法 : 堆排序
    常用数据结构算法:二叉树的最近公共祖先
    java网络通信:HTTP协议 之 Sessions与Cookies
    java网络通信:HTTP协议
    常见的设计模式:工厂模式
    Java基础:类加载机制
    一个C++右值引用的问题
    剖析一个用C++写的行情交易系统
    C++ Coroutine简明教程
  • 原文地址:https://www.cnblogs.com/dplearning/p/4388443.html
Copyright © 2020-2023  润新知