2017-04-21 25 views
0

secondがチャージしたときに音を鳴らそうとしています。Qtでサウンドを設定するには

は私のstopwatchmillisecondsがあり、それはmiliseconds'変更、ないseconds'ものの下で果たしています。 *seconds*に対しての条件を作成する必要があります。

しかし、を正しく実行できません。この状態はアドバイスできますか?

私のコンストラクタとスロット:ここ

は私方法milliseconds ためQMediaPlayerオブジェクト滞在)である

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); 
    } 

} 
+0

「timerEvent」期間とは何ですか? – eyllanesc

+0

@eyllanescこれは、私のボタン 'countinue'を使って接続するために作成されたものです。 ここに、 'timerEvent'が使用されるSLOTがあります: ' void StopMainWindow :: pause(void) { ** timerEvent **(new QTimerEvent(0)); mTotalTime + = mSessionTime; mRunning = false; } ' – Nikitax

+0

あなたの完全なコードを置くことができますが、これは間違っているようです。 – eyllanesc

答えて

0

私は一度だけQMediaPlayerを初期化してお勧めしますを配置してQMediaPlaylistにサウンドを追加するを連続して実行すると、サウンドは正確な秒であるため、タイマーを使用する必要はありません。 QLabelをミリ秒ごとに変更したい場合は、startTimer(1)を使用します。 complete example

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); 
    } 
} 
+0

助けてくれてありがとう、本当にうまくいきました。 – Nikitax

関連する問題