[英]How to set a sound in Qt
我想播放声音,当second
chages。
在我的stopwatch
,以milliseconds
,并且以miliseconds'
变化(而不是seconds'
变化)播放。 我应该为*seconds*
创建一个条件 。
但是不能正确地做到这一点,您能建议这种情况吗?
这是我的方法 (将QMediaPlayer
的对象 QMediaPlayer
milliseconds
):
我的构造函数和插槽:
StopMainWindow::StopMainWindow(QWidget *parent) :
QMainWindow(parent),
mRunning(false)
, mStartTime()
, mTotalTime(0)
{
//ON THE TOP THERE ARE QPUSHBUTTONS AND QLABELS OBJECTS
connect(pushButton_Start, SIGNAL(clicked()), SLOT(start()));
connect(pushButton_go_on, SIGNAL(clicked()), SLOT(pause()));
connect(pushButton_Stop, SIGNAL(clicked()), SLOT(stop()));
connect(pushButton_Close, SIGNAL(clicked()), SLOT(close()));
connect(pushButton_Back,SIGNAL(clicked()),SLOT(back()));
///////////////////////////////////////////////////////////////////////////////
setCentralWidget(centralWidget);
///////////////////////////////////////////////////////////////////////////////////////////////
pushButton_Start->setEnabled(true);
pushButton_go_on->setEnabled(false);
pushButton_Stop->setEnabled(false);
startTimer(0);
}
StopMainWindow::~StopMainWindow()
{}
void StopMainWindow::start(void)
{
pushButton_Start->setEnabled(false);
pushButton_go_on->setEnabled(true);
pushButton_Stop->setEnabled(true);
mStartTime = QDateTime::currentDateTime();
mRunning = true;
QMediaPlayer *music=new QMediaPlayer();
music->setMedia(QUrl("qrc:/sounds/tik.mp3"));
music->play();
}
void StopMainWindow::stop(void)
{
pushButton_Start->setEnabled(true);
pushButton_go_on->setEnabled(true);
pushButton_Stop->setEnabled(false);
mTotalTime = 0;
mRunning = false;
}
void StopMainWindow::pause(void)
{
pushButton_Start->setEnabled(true);
pushButton_go_on->setEnabled(false);
pushButton_Stop->setEnabled(true);
timerEvent(new QTimerEvent(0));
mTotalTime += mSessionTime;
mRunning = false;
}
void StopMainWindow::timerEvent(QTimerEvent *)
{
if(mRunning)
{
mSessionTime = mStartTime.msecsTo(QDateTime::currentDateTime());
qint64 time = mTotalTime + mSessionTime;
time *= 111;
unsigned int h = time / 1000 / 60 / 60;
unsigned int m = (time / 1000 / 60) - (h * 60);
unsigned int s = (time / 1000) - ((m + (h * 60))* 60);
unsigned int ms = time - (s + ((m + (h * 60))* 60)) * 1000;
const QString diff = QString("%1:%2:%3,%4").arg(h, 2, 10, QChar('0')).arg(m, 2, 10, QChar('0')).arg(s, 2, 10, QChar('0')).arg(ms, 3, 10, QChar('0'));
mLabel->setText(diff);
}
}
我建议仅初始化QMediaPlayer
一次,并通过放置QMediaPlaylist::Loop
使其连续运行来通过QMediaPlaylist
添加声音,因为声音精确到一秒就不需要使用计时器。 当您希望QLabel
每毫秒更改一次时,我们使用startTimer(1)
。 完整的例子 。
StopMainWindow::StopMainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::StopMainWindow)
{
[...]
connect(pushButton_Start, &QPushButton::clicked, this, &StopMainWindow::start);
connect(pushButton_go_on, &QPushButton::clicked, this, &StopMainWindow::pause);
connect(pushButton_Stop, &QPushButton::clicked, this, &StopMainWindow::stop);
pushButton_Start->setEnabled(true);
pushButton_go_on->setEnabled(false);
pushButton_Stop->setEnabled(false);
music=new QMediaPlayer(this, QMediaPlayer::StreamPlayback);
QMediaPlaylist *playlist = new QMediaPlaylist;
playlist->addMedia(QUrl("qrc:/sounds/tik.mp3"));
playlist->setPlaybackMode(QMediaPlaylist::Loop);
music->setPlaylist(playlist);
music->setVolume(100);
mRunning = false;
}
void StopMainWindow::start()
{
pushButton_Start->setEnabled(false);
pushButton_go_on->setEnabled(true);
pushButton_Stop->setEnabled(true);
music->play();
mRunning = true;
mStartTime = QDateTime::currentDateTime();
startTimer(1);
}
void StopMainWindow::pause()
{
music->pause();
mRunning = false;
pushButton_Start->setEnabled(true);
pushButton_go_on->setEnabled(false);
pushButton_Stop->setEnabled(true);
mTotalTime += mSessionTime;
}
void StopMainWindow::stop()
{
pushButton_Start->setEnabled(true);
pushButton_go_on->setEnabled(true);
pushButton_Stop->setEnabled(false);
music->stop();
mRunning = false;
}
void StopMainWindow::timerEvent(QTimerEvent *event)
{
Q_UNUSED(event)
if(mRunning){
mSessionTime = mStartTime.msecsTo(QDateTime::currentDateTime());
qint64 time = mTotalTime + mSessionTime;
time *= 111;
unsigned int h = time / 1000 / 60 / 60;
unsigned int m = (time / 1000 / 60) - (h * 60);
unsigned int s = (time / 1000) - ((m + (h * 60))* 60);
unsigned int ms = time - (s + ((m + (h * 60))* 60)) * 1000;
const QString diff = QString("%1:%2:%3,%4").arg(h, 2, 10, QChar('0')).arg(m, 2, 10, QChar('0')).arg(s, 2, 10, QChar('0')).arg(ms, 3, 10, QChar('0'));
mLabel->setText(diff);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.