VS平台下制作简单的播放器(利用Qt类库)

最近在学Qt,但是发现在Qt Creator 下能正常运行的程序想直接移植到VS下还是要花点功夫的。由于在Creator当中并没有UI_xx.h文件,项目当中的声明和creator不一样,所以在摸索过程中遇到了一些障碍,本文在VS中已经配置好Qt的前提下,在VS平台下制作了一款播放器,支持mp3和mp4格式。下面贴上代码:

1.在ui_xx.h下先画好界面,如下图


接下来是.h文件,代码如下:

#ifndef MYCLASS_H
#define MYCLASS_H


#include <QtWidgets/QWidget>
#include <qmediaplayer.h>
#include <QtGui/QMovie>
#include "ui_myclass.h"
//#include <iostream>
#include <stdlib.h>
using namespace std;
QT_BEGIN_NAMESPACE
class QAbstractButton;
class QSlider;
class QLabel;
QT_END_NAMESPACE
class MyClass : public QWidget,public Ui_MyClassClass
{
Q_OBJECT


public:
MyClass(QWidget *parent = 0);
~MyClass();
public slots:
    void openFile();
    void play1();


private slots:
    void mediaStateChanged(QMediaPlayer::State state);
    void positionChanged(qint64 position);
    void durationChanged(qint64 duration);
    void setPosition(int position);
    void handleError();

public:
    QMediaPlayer mediaPlayer;
    /*QAbstractButton *playButton;
QAbstractButton *openButton;
    QSlider *positionSlider;*/
    QLabel *errorLabel;
};

#endif // MYCLASS_H

接下来是.cpp文件:

#include "myclass.h"
#include <qvideowidget.h>
#include <qvideosurfaceformat.h>
#include <QtWidgets>


MyClass::MyClass(QWidget *parent)
: QWidget(parent)
, mediaPlayer(0, QMediaPlayer::VideoSurface)
    // , playButton(0)
  //  , positionSlider(0)
   //, errorLabel(0)
{
setupUi(this);
QVideoWidget *videoWidget = new QVideoWidget;


   // QAbstractButton *openButton = new QPushButton(tr("Open"));
connect(this->openButton, SIGNAL(clicked()), this, SLOT(openFile()));
//playButton = new QPushButton;
 this->playButton->setEnabled(false);
this->playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
connect(this->playButton, SIGNAL(clicked()),this, SLOT(play1()));
//  positionSlider = new QSlider(Qt::Horizontal);
  //  positionSlider->setRange(0, 0);
 connect(this->positionSlider, SIGNAL(sliderMoved(int)),this, SLOT(setPosition(int)));
  errorLabel = new QLabel;
   errorLabel->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
     QBoxLayout *controlLayout = new QHBoxLayout;
    controlLayout->setMargin(0);
    controlLayout->addWidget(openButton);
    controlLayout->addWidget(playButton);
    controlLayout->addWidget(positionSlider);


    QBoxLayout *layout = new QVBoxLayout;
    layout->addWidget(videoWidget);
    layout->addLayout(controlLayout);
    layout->addWidget(errorLabel);
setLayout(layout);
    mediaPlayer.setVideoOutput(videoWidget);
    connect(&mediaPlayer, SIGNAL(stateChanged(QMediaPlayer::State)),
            this, SLOT(mediaStateChanged(QMediaPlayer::State)));
    connect(&mediaPlayer, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
    connect(&mediaPlayer, SIGNAL(durationChanged(qint64)), this, SLOT(durationChanged(qint64)));
    connect(&mediaPlayer, SIGNAL(error(QMediaPlayer::Error)), this, SLOT(handleError()));
}


MyClass::~MyClass()
{


}
void MyClass::openFile()
{
    errorLabel->setText("");


    QString fileName = QFileDialog::getOpenFileName(this, tr("Open Movie"),QDir::homePath());


    if (!fileName.isEmpty()) {
        mediaPlayer.setMedia(QUrl::fromLocalFile(fileName));
        playButton->setEnabled(true);
    }
}


void MyClass::play1()
{
    switch(mediaPlayer.state()) {
    case QMediaPlayer::PlayingState:
        mediaPlayer.pause();
        break;
    default:
        mediaPlayer.play();
        break;
    }
}


void MyClass::mediaStateChanged(QMediaPlayer::State state)
{
    switch(state) {
    case QMediaPlayer::PlayingState:
        playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
        break;
    default:
        playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
        break;
    }
}


void MyClass::positionChanged(qint64 position)
{
    positionSlider->setValue(position);
}


void MyClass::durationChanged(qint64 duration)
{
    positionSlider->setRange(0, duration);
}


void MyClass::setPosition(int position)
{
    mediaPlayer.setPosition(position);
}


void MyClass::handleError()
{
    playButton->setEnabled(false);
    errorLabel->setText("Error: " + mediaPlayer.errorString());
}

最后是main函数:

#include "myclass.h"
#include <QtWidgets/QApplication>
#include "stdafx.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MyClass w;
w.show();
return a.exec();
}

以上就是我根据Qt当中的示例自己编辑的一个小播放器,虽然还有很多功能有待实现,但是已经有了播放器的基本功能。本人小白一个,希望能和广大站友一起探讨提高。


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用vs制作音乐播放器和使用Qt制作音乐播放器在很多方面有一些相似之处,但也有一些显著的差异。 首先,无论是使用vs还是Qt,都可以实现创建一个图形界面的音乐播放器。通过使用图形界面,用户可以更直观地浏览和操作音乐文件。无论是选择vs还是Qt,都可以通过拖放控件、设置按钮和进度条等来构建用户友好的界面。 然而,vsQt的工作方式有所不同。在使用vs时,开发者通常会使用C#或C++等语言来编写代码。vs提供了一系列的图形界面设计工具,如Windows Forms或WPF,可以方便地创建图形界面。通过使用.NET Framework等库,可以轻松处理音乐文件的读取和播放。 相比之下,Qt是一个跨平台的开发框架,使用C++语言编写代码。Qt在图形界面开发方面拥有强大的功能和灵活性。通过使用Qt的库和类,可以轻松实现音乐文件的读取、解码和播放功能。Qt还提供了丰富的UI控件和可定制化的样式,以满足开发者对音乐播放器界面的自定义需求。 另一个重要的区别是vsQt的适用平台不同。使用vs创建的音乐播放器主要运行在Windows操作系统上,而使用Qt创建的音乐播放器可以在多个操作系统上运行,包括Windows、Linux和Mac OS等。这意味着,如果开发者希望将音乐播放器应用到不同的平台上,选择Qt可能更具有优势。 总而言之,在选择vs还是Qt制作音乐播放器时,需要考虑开发者的编程经验、目标平台和需求,然后选择最适合的工具和技术来实现功能丰富的音乐播放器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值