FFmpeg开发(七)——Qt视频播放器之播放列表类(参考了暴风影音、迅雷影音)
FFmpeg開發(fā)(七)——Qt視頻播放器之播放列表類(參考了暴風(fēng)影音、迅雷影音)
上一篇分享了音頻類的封裝。
FFmpeg開發(fā)(六)——Qt視頻播放器之封裝音頻類(參考了暴風(fēng)影音、迅雷影音)
本播放器系列相關(guān)的文章鏈接大家可以參考如下:
FFmpeg開發(fā)(四)——Qt實現(xiàn)一個視頻播放器(參考了暴風(fēng)影音、迅雷影音)
FFmpeg開發(fā)(五)——Qt視頻播放器之封裝FFmpeg類(參考了暴風(fēng)影音、迅雷影音)
FFmpeg開發(fā)(六)——Qt視頻播放器之封裝音頻類(參考了暴風(fēng)影音、迅雷影音)
FFmpeg開發(fā)(七)——Qt視頻播放器之播放列表類(參考了暴風(fēng)影音、迅雷影音)
FFmpeg開發(fā)(八)——Qt視頻播放器之多線程的使用(參考了暴風(fēng)影音、迅雷影音)
FFmpeg開發(fā)(九)——Qt視頻播放器之快進滑動條(參考了暴風(fēng)影音、迅雷影音)
實現(xiàn)的額效果如下:
?
?本篇分享實現(xiàn)視頻播放器的播放列表。
播放列表主要內(nèi)容就是一個QTableWidget實現(xiàn)的。
m_pTableWidget = new QTableWidget();m_pTableWidget->setObjectName("TableWidget");QHeaderView *hHeader = m_pTableWidget->horizontalHeader();hHeader->setHidden(true);QHeaderView *vHeader = m_pTableWidget->verticalHeader();vHeader->setHidden(true);m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //選中整行.m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection); //單行模式.m_pTableWidget->setColumnCount(1);單擊QTableWidget中的item的時候時,會有一個虛線邊框,需要加一行去掉虛線的代碼:
m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);m_pTableWidget->setFocusPolicy(Qt::NoFocus); //設(shè)置item選中后去掉虛線邊框.實現(xiàn),拖拽文件播放的話,需要設(shè)置啟用拖放事件,支持拖放事件:
setAcceptDrops(true); //啟用拖放事件.相關(guān)的拖放事件:
void PlayListWidget::dragEnterEvent(QDragEnterEvent *event) {if (event->mimeData()->hasFormat("text/uri-list"))event->acceptProposedAction(); }void PlayListWidget::dropEvent(QDropEvent *event) {QList<QUrl> urls = event->mimeData()->urls();if(urls.isEmpty())return;QStringList strFiles;foreach(QUrl url, urls) {QString file_name = url.toLocalFile();strFiles<<file_name;qDebug()<<"drop file name"<<file_name;}if( !strFiles.isEmpty() ){slotOpenFileName(strFiles); //添加文件路徑到listwidget.emit sigPlaySelectFile(strFiles.at(0));} }在寫實現(xiàn)雙擊,播放列表中的文件,實現(xiàn)播放視頻的功能,遇到一個問題,就是會報下面這個錯:
connect( m_pTableWidget, SIGNAL(cellDoubleClicked(int row, int column)), this, SLOT(slotFileDoubleClicked(int row, int column)));error:QObject::connect: No such signal QTableWidget::cellDoubleClicked(int row, int column)原因是Qt5信號和槽的寫法問題:下面這兩個信號都可以實現(xiàn)雙擊。
//解決方案:是信號和槽的寫法問題,Qt5下面兩個寫法都行.//connect(m_pTableWidget,&QTableWidget::cellDoubleClicked, this, &PlayListWidget::slotFileDoubleClicked);connect(m_pTableWidget,&QTableWidget::itemDoubleClicked, this, &PlayListWidget::slotItemDoubleClicked);對應(yīng)的槽函數(shù):
void PlayListWidget::slotFileDoubleClicked(int row, int column) {qDebug()<<"鼠標(biāo)點擊"<<row<<column;QTableWidgetItem *item = new QTableWidgetItem;item = m_pTableWidget->item(row, column);qDebug()<<"鼠標(biāo)點擊 neironh"<<item->text()<<row; }void PlayListWidget::slotItemDoubleClicked(QTableWidgetItem *item) {qDebug()<<"鼠標(biāo)點擊 item"<<item->text()<<item->row();/*do something............*/ }下一篇分享用多線程解碼。
FFmpeg開發(fā)(八)——Qt視頻播放器之多線程的使用(參考了暴風(fēng)影音、迅雷影音)
本文原創(chuàng)作者:馮一川(ifeng12358@163.com),未經(jīng)作者授權(quán)同意,請勿轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的FFmpeg开发(七)——Qt视频播放器之播放列表类(参考了暴风影音、迅雷影音)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html audio 列表,html5中
- 下一篇: 48种字体特效