Qt怎樣實(shí)現(xiàn)通用視頻控件

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

創(chuàng)新互聯(lián)公司制作網(wǎng)站網(wǎng)頁(yè)找三站合一網(wǎng)站制作公司,專注于網(wǎng)頁(yè)設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站,網(wǎng)站設(shè)計(jì),企業(yè)網(wǎng)站搭建,網(wǎng)站開發(fā),建網(wǎng)站業(yè)務(wù),680元做網(wǎng)站,已為上千服務(wù),創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)將一如既往的為我們的客戶提供最優(yōu)質(zhì)的網(wǎng)站建設(shè)、網(wǎng)絡(luò)營(yíng)銷推廣服務(wù)!

一、前言

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

通用視頻控件功能:

  1. 可設(shè)置邊框大小

  2. 可設(shè)置邊框顏色

  3. 可設(shè)置兩路OSD標(biāo)簽

  4. 可設(shè)置是否繪制OSD標(biāo)簽

  5. 可設(shè)置標(biāo)簽文本或圖片

  6. 可設(shè)置OSD位置 左上角+左下角+右上角+右下角

  7. 可設(shè)置OSD風(fēng)格 文本+日期+時(shí)間+日期時(shí)間+圖片

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

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

  10. 發(fā)送信號(hào)通知單擊了哪個(gè)懸浮按鈕

  11. 能夠識(shí)別拖進(jìn)來的文件,通知url

  12. 提供open close pause等接口

二、代碼思路

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

//用布局頂住,左側(cè)彈簧
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 *)
{
    //重新設(shè)置頂部工具欄的位置和寬高,可以自行設(shè)置頂部顯示或者底部顯示
    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 *)
{
    //這里還可以增加一個(gè)判斷,是否獲取了焦點(diǎn)的才需要顯示
    //if (this->hasFocus()) {}
    if (flowEnable) {
        flowPanel->setVisible(true);
    }
}

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

//支持拖曳識(shí)別
void VideoWidget::dropEvent(QDropEvent *event)
{
    //拖放完畢鼠標(biāo)松開的時(shí)候執(zhí)行
    //判斷拖放進(jìn)來的類型,取出文件,進(jìn)行播放
    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)
{
    //拖曳進(jìn)來的時(shí)候先判斷下類型,非法類型則不處理
    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怎樣實(shí)現(xiàn)通用視頻控件

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Qt怎樣實(shí)現(xiàn)通用視頻控件”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!

文章名稱:Qt怎樣實(shí)現(xiàn)通用視頻控件
URL標(biāo)題:http://muchs.cn/article30/pihoso.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、外貿(mào)網(wǎng)站建設(shè)、虛擬主機(jī)、建站公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)