最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt5開發(fā)視頻播放器的項(xiàng)目實(shí)踐

 更新時(shí)間:2023年08月15日 10:01:39   作者:黃宏哲  
Qt對音視頻的播放和控制、相機(jī)拍攝、收音機(jī)等多媒體應(yīng)用提供了強(qiáng)大的支持,本文主要介紹了Qt5開發(fā)視頻播放器,具有一定的參考價(jià)值,感興趣的可以了解一下

一、播放器界面UI設(shè)計(jì)

控件對象名位置(坐標(biāo)點(diǎn))對象名稱組件名稱備注
Widget(0, 0, 809, 572)WidgetQWidget
labellabelQLabel播放窗口
label_2label_2QLabel
voice_controlvoice_controlQSlider音量滑動(dòng)條
btn_openbtn_openQPushButton打開文件按鈕
label_4label_4QLabel
label_ctlabel_ctQLabel
progress_reportprogress_reportMySlider當(dāng)前播放進(jìn)度標(biāo)簽
label_all_timelabel_all_timeQLabel視頻時(shí)長標(biāo)簽
btn_htbtn_htQPushButton后退按鈕
btn_qjbtn_qjQPushButton前進(jìn)按鈕
btn_startbtn_startQPushButton播放按鈕 / 暫停按鈕
btn_fullshowbtn_fullshowQPushButton全屏播放按鈕
label_5label_5QLabel顯示播放列表文本
listWidgetlistWidgetQListWidget播放列表

效果圖如下

二、播放器基本實(shí)現(xiàn)

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QMediaPlayer>  //播放器
#include <QVideoWidget>  //播放窗口
#include <QMediaPlaylist>//播放列表
#include <QString>
#include <QFileDialog>//文件窗口
#include <QDebug>
#include <QResizeEvent>
#include <QMouseEvent>
#include <QKeyEvent>
#include <QListWidgetItem>
#include <QObject>
#include <QAbstractEventDispatcher>
#include "globalkeyfilter.h"
namespace Ui
{
class Widget;
}
class QMediaPlayer;
class QMediaPlaylist;
class QVideoWidget;
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget* parent = 0);
    void setget_Alltime(qint64 playtime);//獲取視頻時(shí)長并設(shè)置到標(biāo)簽
    void setget_currenttime(qint64 playtime);//獲取當(dāng)時(shí)播放位置并設(shè)置
    void settimeslider(qint64 playtime);//設(shè)置進(jìn)度條
    void exitFullScreen();  // 退出全屏
    void togglePlayback();  // 暫停/播放
    ~Widget();
private slots:
    void on_btn_open_clicked();//打開音視頻
    void on_btn_start_clicked();//播放
    void on_voice_control_valueChanged(int value);//控制聲音
    void on_btn_fullshow_clicked();//全屏顯示
    void getduration(qint64 playtime);   //獲取時(shí)間改變信號
    void getposition(qint64 playtime);   //獲取當(dāng)前播放位置
    void on_btn_ht_clicked();//上一個(gè)音視頻
    void on_btn_qj_clicked();//下一個(gè)音視頻
    void on_listWidget_doubleClicked(const QModelIndex& index);
private:
    Ui::Widget* ui;
    QStringList         m_strlist;          //文件名列表
    QMediaPlayer*       m_pMediaPlayer;     //播放器
    QVideoWidget*       m_pVideoWidget;     //播放窗口
    QMediaPlaylist*     m_MediaPlaylist;    //播放列表
    QMediaPlayer::State m_state;            //播放狀態(tài)
    int m_hour;                             //視頻總時(shí)長
    int m_munete;                           //分鐘
    int m_second;                           //秒
    bool m_sliderstate;                     //滑塊是否被選中的狀態(tài)
    int m_slider_crtval;                    //滑塊當(dāng)前值
    GlobalKeyFilter* m_globalKeyFilter;     //  GlobalKeyFilter 類
};
#endif // WIDGET_H

將label組件傳入QVideoWidget作為實(shí)例化參數(shù),即可獲得播放窗口,并通過QMediaPlayer調(diào)用setVideoOutput函數(shù),指定為播放器窗口。

三、自定義滑塊控件

#ifndef MYSLIDER_H
#define MYSLIDER_H
#include <QMouseEvent>
#include <QSlider>
class MySlider : public QSlider
{
    Q_OBJECT
public:
    explicit MySlider(QWidget* parent = nullptr);
protected:
    void mousePressEvent(QMouseEvent* ev);
    void mouseReleaseEvent(QMouseEvent* ev);
signals:
    void mousepress(int value);
    void mouserelease(int value);
};
#endif // MYSLIDER_H

由于進(jìn)度條數(shù)值和視頻時(shí)長的單位不統(tǒng)一,需要自定義控件MySlider,監(jiān)聽鍵盤事件,發(fā)送計(jì)算得到的視頻時(shí)長數(shù)據(jù)到Widget類的匿名槽函數(shù)中,完成滑動(dòng)條功能。

四、全局鍵盤監(jiān)聽事件

創(chuàng)建一個(gè)GlobalKeyFilter類,對widget類向前聲明,實(shí)現(xiàn)全局的鍵盤監(jiān)聽。

#include "globalkeyfilter.h"
#include "widget.h"
#include <QKeyEvent>
#include <Windows.h>
GlobalKeyFilter::GlobalKeyFilter(Widget* widget) : m_widget(widget)
{
    qDebug() << "鍵盤監(jiān)聽事件啟動(dòng)了" << "\n";
}
bool GlobalKeyFilter::nativeEventFilter(const QByteArray& eventType, void* message, long* result)
{
    if (eventType == "windows_generic_MSG")
    {
        MSG* msg = static_cast<MSG*>(message);
        if (msg->message == WM_KEYDOWN)
        {
            int key = msg->wParam;
            // 處理 ESC 鍵
            if (key == VK_ESCAPE)
            {
                if (m_widget)
                {
                    m_widget->exitFullScreen();
                }
            }
            // 處理空格鍵
            if (key == VK_SPACE)
            {
                m_widget->togglePlayback();
            }
        }
    }
    // 返回 false 以便繼續(xù)傳遞事件
    return false;
}

 到此這篇關(guān)于Qt5開發(fā)視頻播放器的文章就介紹到這了,更多相關(guān)Qt5開發(fā)視頻播放器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • VC++?2019?"const?char*"類型的實(shí)參與"LPCTSTR"類型的形參不兼容解決

    VC++?2019?"const?char*"類型的實(shí)參與"LPCTSTR"

    這篇文章主要給大家介紹了關(guān)于VC++?2019?"const?char*"類型的實(shí)參與"LPCTSTR"類型的形參不兼容的解決方法,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2023-03-03
  • C++插入排序算法實(shí)例

    C++插入排序算法實(shí)例

    這篇文章主要介紹了C++插入排序算法實(shí)例,本文先是講解了什么插入排序,然后給出了C++代碼實(shí)例,需要的朋友可以參考下
    2014-10-10
  • 一文詳解C++關(guān)鍵詞auto的用法

    一文詳解C++關(guān)鍵詞auto的用法

    在早期C/C++中auto的含義是:使用auto修飾的變量,是具有自動(dòng)存儲器的局部變量,但遺憾的是一直沒有人去使用它,在 C++11中,auto不再是一個(gè)存儲類型指示符,而是作為一個(gè)新的類型指示符來指示編譯器,本文將給大家詳細(xì)的介紹一下C++關(guān)鍵詞auto的用法,需要的朋友可以參考下
    2024-02-02
  • 輸入一個(gè)字符串,取出其中的整數(shù)(實(shí)現(xiàn)代碼)

    輸入一個(gè)字符串,取出其中的整數(shù)(實(shí)現(xiàn)代碼)

    輸入一個(gè)字符串,內(nèi)含所有數(shù)字和非數(shù)字字符。將其中連續(xù)的數(shù)字作為一個(gè)整數(shù),依次存放到一個(gè)數(shù)組中,統(tǒng)計(jì)共有多少個(gè)整數(shù),并輸出這些數(shù)
    2013-09-09
  • QT實(shí)現(xiàn)將兩個(gè)時(shí)間相加的算法[hh:?mm?+?hh:?mm]的示例代碼

    QT實(shí)現(xiàn)將兩個(gè)時(shí)間相加的算法[hh:?mm?+?hh:?mm]的示例代碼

    本文主要介紹了QT實(shí)現(xiàn)將兩個(gè)時(shí)間相加的算法[hh:?mm?+?hh:?mm]的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C#將Unicode編碼轉(zhuǎn)換為漢字字符串的簡單方法

    C#將Unicode編碼轉(zhuǎn)換為漢字字符串的簡單方法

    下面小編就為大家?guī)硪黄狢#將Unicode編碼轉(zhuǎn)換為漢字字符串的簡單方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • C++ LeetCode1812判斷國際象棋棋盤格子顏色

    C++ LeetCode1812判斷國際象棋棋盤格子顏色

    這篇文章主要為大家介紹了C++ LeetCode1812判斷國際象棋棋盤格子顏色, 有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • QML與C++幾種交互方式

    QML與C++幾種交互方式

    QML作為構(gòu)建界面的語言是非常簡潔的,但是界面的后臺有些時(shí)候是經(jīng)常要與C++交互的,本文主要介紹了QML與C++幾種交互方式,感興趣的可以了解一下
    2024-04-04
  • C語言實(shí)現(xiàn)一個(gè)簡單的掃雷游戲

    C語言實(shí)現(xiàn)一個(gè)簡單的掃雷游戲

    掃雷是電腦上很經(jīng)典的游戲,特意去網(wǎng)上玩了一會,幾次調(diào)試之后,發(fā)現(xiàn)這個(gè)比三子棋要復(fù)雜一些,尤其是空白展開算法上和堵截玩家有的一拼,與實(shí)際游戲差別較大,不能使用光標(biāo),下面來詳解每一步分析
    2021-10-10
  • C++?計(jì)算時(shí)間差的五種方法小結(jié)

    C++?計(jì)算時(shí)間差的五種方法小結(jié)

    本文主要介紹了C++?計(jì)算時(shí)間差的五種方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04

最新評論

泸西县| 临颍县| 陕西省| 确山县| 搜索| 鄂州市| 乌兰察布市| 馆陶县| 莲花县| 武陟县| 确山县| 石棉县| 慈利县| 桑日县| 淮阳县| 博罗县| 常德市| 安庆市| 土默特右旗| 澄城县| 翁牛特旗| 花垣县| 常熟市| 阿克| 承德市| 永嘉县| 伊川县| 呼和浩特市| 通辽市| 那曲县| 绥宁县| 北辰区| 新兴县| 盖州市| 西林县| 阿拉善左旗| 精河县| 安化县| 五家渠市| 疏勒县| 南昌县|