首先,初学QT,只能说是“实现”了单曲循环,可能方法欠妥。
为了达到单曲循环这一功能,特地继承QWidget写了个类BackPlat,但是这个BackPlat不show(),因此,是不会出现BackPlat对象的窗口。
以下是backplat.h的源码
#ifndef BACKPLAT_H
#define BACKPLAT_H
#include <QWidget>
#include <phonon/MediaObject>
using namespace Phonon;
namespace Ui {
class BackPlat;
}
class BackPlat : public QWidget
{
Q_OBJECT
public:
explicit BackPlat(QWidget *parent = 0);
~BackPlat();
public slots:
void playAgain();
private:
Ui::BackPlat *ui;
MediaObject * backsound;
};
#endif // BACKPLAT_H
以下是backplat.cpp源码
#include "backplat.h"
#include "ui_backplat.h"
BackPlat::BackPlat(QWidget *parent) :
QWidget(parent),
ui(new Ui::BackPlat)
{
ui->setupUi(this);
backsound = createPlayer(MusicCategory,MediaSource("G:/QTprogram/justforfun-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK____/debug/test.wav"));
backsound->play();
connect(backsound,SIGNAL(aboutToFinish()),this,SLOT(playAgain()));
}
BackPlat::~BackPlat()
{
delete backsound;
delete ui;
}
void BackPlat::playAgain()
{
backsound->setCurrentSource(MediaSource("G:/QTprogram/justforfun-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK____/debug/test.wav"));
backsound->play();
}
可见在BackPlat的构造函数中,有connect将backsound播放完毕的信号发送给BackPlat,而backPlat对象在收到信号后即执行playAgain();
现在是main.cpp源码
#include <QtGui/QApplication>
#include <QTextCodec>
#include "backplat.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec *codec = QTextCodec::codecForName("GB2312");
QTextCodec::setCodecForLocale(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForTr(codec);
BackPlat back;
return a.exec();
}
如此,即实现循环播放
G:/QTprogram/justforfun-build-desktop-Qt_4_8_1_for_Desktop_-_MinGW__Qt_SDK____/debug/
目录下test.wav的功能。
由于是初学QT,如果大家有更好的方法,欢迎交流.....