Qt怎樣實現通用視頻控件

這篇文章主要介紹了Qt怎樣實現通用視頻控件,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創新互聯公司制作網站網頁找三站合一網站制作公司,專注于網頁設計,成都網站設計、做網站,網站設計,企業網站搭建,網站開發,建網站業務,680元做網站,已為上千服務,創新互聯公司網站建設將一如既往的為我們的客戶提供最優質的網站建設、網絡營銷推廣服務!

一、前言

在之前做的視頻監控系統中,根據不同的用戶需要,做了好多種視頻監控內核,有ffmpeg內核的,有vlc內核的,有mpv內核的,還有海康sdk內核的,為了做成通用的功能,不同內核很方便的切換,比如pro直接改一個DEFINE的變量名,所以需要將各種內核的使用方法做成一樣的接口,這樣看起來就很整齊,所以后面特意提煉了一個通用的視頻控件,該控件沒有具體的視頻播放控制功能,需要根據不同的內核去調用具體的方法實現,后面還需要增加大華sdk或者其他第三方廠家的協議的時候,直接套用這個通用視頻控件即可。

通用視頻控件功能:

  1. 可設置邊框大小

  2. 可設置邊框顏色

  3. 可設置兩路OSD標簽

  4. 可設置是否繪制OSD標簽

  5. 可設置標簽文本或圖片

  6. 可設置OSD位置 左上角+左下角+右上角+右下角

  7. 可設置OSD風格 文本+日期+時間+日期時間+圖片

  8. 自定義半透明懸浮窗體,一排按鈕

  9. 懸浮按鈕可自定義設置,包括背景顏色+按下顏色

  10. 發送信號通知單擊了哪個懸浮按鈕

  11. 能夠識別拖進來的文件,通知url

  12. 提供open close pause等接口

二、代碼思路

//設置懸浮條
//頂部工具欄,默認隱藏,鼠標移入顯示移除隱藏
flowPanel = new QWidget(this);
flowPanel->setObjectName("flowPanel");
flowPanel->setVisible(false);

//用布局頂住,左側彈簧
QHBoxLayout *layout = new QHBoxLayout;
layout->setSpacing(2);
layout->setMargin(0);
layout->addStretch();
flowPanel->setLayout(layout);

//按鈕集合名稱,如果需要新增按鈕則在這里增加即可
QList<QString> btns;
btns << "btnFlowVideo" << "btnFlowSnap" << "btnFlowSound" << "btnFlowAlarm" << "btnFlowClose";

void VideoWidget::resizeEvent(QResizeEvent *)
{
    //重新設置頂部工具欄的位置和寬高,可以自行設置頂部顯示或者底部顯示
    int height = 20;
    flowPanel->setGeometry(borderWidth, borderWidth, this->width() - (borderWidth * 2), height);
    //flowPanel->setGeometry(borderWidth, this->height() - height - borderWidth, this->width() - (borderWidth * 2), height);
}

void VideoWidget::enterEvent(QEvent *)
{
    //這里還可以增加一個判斷,是否獲取了焦點的才需要顯示
    //if (this->hasFocus()) {}
    if (flowEnable) {
        flowPanel->setVisible(true);
    }
}

void VideoWidget::leaveEvent(QEvent *)
{
    if (flowEnable) {
        flowPanel->setVisible(false);
    }
}

//支持拖曳識別
void VideoWidget::dropEvent(QDropEvent *event)
{
    //拖放完畢鼠標松開的時候執行
    //判斷拖放進來的類型,取出文件,進行播放
    if(event->mimeData()->hasUrls()) {
        QString url = event->mimeData()->urls().first().toLocalFile();
        this->close();
        this->setUrl(url);
        this->open();
        emit fileDrag(url);
    } else if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
        QTreeWidget *treeWidget = (QTreeWidget *)event->source();
        if (treeWidget != 0) {
            QString url = treeWidget->currentItem()->data(0, Qt::UserRole).toString();
            this->close();
            this->setUrl(url);
            this->open();
            emit fileDrag(url);
        }
    }
}

void VideoWidget::dragEnterEvent(QDragEnterEvent *event)
{
    //拖曳進來的時候先判斷下類型,非法類型則不處理
    if(event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
        event->setDropAction(Qt::CopyAction);
        event->accept();
    } else if(event->mimeData()->hasFormat("text/uri-list")) {
        event->setDropAction(Qt::LinkAction);
        event->accept();
    } else {
        event->ignore();
    }
}

三、效果圖

Qt怎樣實現通用視頻控件

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Qt怎樣實現通用視頻控件”這篇文章對大家有幫助,同時也希望大家多多支持創新互聯,關注創新互聯行業資訊頻道,更多相關知識等著你來學習!

文章名稱:Qt怎樣實現通用視頻控件
URL標題:http://m.kartarina.com/article30/pihoso.html

成都網站建設公司_創新互聯,為您提供移動網站建設手機網站建設網站維護外貿網站建設虛擬主機建站公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計
主站蜘蛛池模板: 中文字幕乱偷无码AV先锋| 亚洲AV蜜桃永久无码精品| 国产在线无码视频一区二区三区| 亚洲AV无码专区日韩| 亚洲AV无码一区二区二三区软件 | 精品无码久久久久久久动漫| 中文无码久久精品| 亚洲爆乳少妇无码激情| 国产精品无码成人午夜电影| 国产精品成人99一区无码| 日韩精品真人荷官无码| 精品无码一级毛片免费视频观看 | 特级毛片内射www无码| 国产亚洲AV无码AV男人的天堂| 久久久无码精品亚洲日韩京东传媒| 成在人线AV无码免费| av区无码字幕中文色| 亚洲精品无码MV在线观看| 成人免费无码大片A毛片抽搐| 色综合久久无码中文字幕| 国产精品va无码一区二区| 亚洲AV无码一区二三区| YW尤物AV无码国产在线观看| 无码人妻精一区二区三区| 无码人妻丰满熟妇啪啪网站牛牛| 精品无码国产自产拍在线观看| 国产午夜无码视频在线观看| 东京热人妻无码一区二区av| 亚洲人成影院在线无码观看| 国产日韩精品无码区免费专区国产| 亚洲国产成人无码AV在线| 亚洲中文字幕无码久久2020| 毛片无码免费无码播放| 精品无码久久久久国产| 亚洲AV成人无码天堂| 亚洲AV色无码乱码在线观看| 色综合无码AV网站| 国产成人无码网站| 永久免费无码日韩视频| 永久免费AV无码网站国产| 亚洲精品无码久久久久sm|