2017-11-28 9 views
0

私は2つのボタンを持っています:再生と一時停止。そしてスライダーバー。QEventLoopを使って関数を呼び出す

イベントが発行されるまで、または一時停止ボタンが押されるまで、スライドの位置を変更するにはプレーヤーを押します。このため私はQEventLoopを使用しています。

void MainWindow::slider() 
{ 

    for(min_value = ui->horizontalSlide->value(); min_value <= max_value; min_value++){ 
    //msleep(2000); 
    ui->horizontalSlide->setValue(min_value); 
    } 
} 


void MainWindow::on_playButton_clicked() 
{ 
    QEventLoop loop2; 
    QObject::connect(this, SIGNAL(quitLoop()), &loop2... ?); 
    loop2.exec(); 
} 

void MainWindow::on_pauseButton_clicked() 
{ 
    emit quitLoop(); 

} 

しかし、私はon_playButton_clicked機能にQEventLoopを接続するかどうかはわかりません....どれ例またはアドバイスはありますか?

ありがとうございました!

+2

なぜありませんシンプルなQTimerは、スライダーと信号を開始し、もう1つはタイマーを停止するように更新しますか? – Marco

+0

@Marcoスライダが変化すると、関数が呼び出されて画面に描画されます。したがって、スライダは図面が終了したときにのみ位置を変更できます。 QTimerを使ってこれを行うことはできますか? –

+1

QTimer信号を最初の描画関数に接続することができます。それが終わったら、スライダを動かす信号を出します。 – Marco

答えて

2

ちょうどQTimerを使用し、この場合のためのイベントループを作成する必要はありません。

* .hの

private:  
    QTimer *timer 

た.cpp

MainWindow::MainWindow(QWidget *parent) 
    :QMainWindow(parent) 
{ 
    [...] 
    timer = new QTimer(this); 
    connect(timer, &QTimer::timeout, [this](){ 
     int value = ui->horizontalSlide->value(); 
     ui->horizontalSlide->setValue(value+1); 
     if(ui->horizontalSlide->value() == ui->horizontalSlide->maximum()) 
      timer->stop(); 
    }); 
} 

void MainWindow::on_playButton_clicked(){ 

    timer->start(2000); 
} 


void MainWindow::on_pauseButton_clicked() 
{ 
    timer->stop(); 

} 
+1

この例をありがとうございました。 –

関連する問題