0

QImage を明るくする関数を見つけ、Qt アプリケーションで使用しました。ボタンを段階的に明るくし、ユーザーがクリックした後に段階的に初期状態に戻る単純な「アニメーション」を示したいと思います。

ここに私のコード:

void Widget::on_stopButton_clicked(){

    player.stop();

    for(int i = 0; i <= 50; ++i){

        QImage* image = new QImage(":/Graphics/Graphics/StopButton.png");
        changeBrightness(*image, i);
        QPixmap* pixmap = new QPixmap(QPixmap::fromImage(*image));
        ui->stopButton->setIcon(QIcon(*pixmap));
        QThread::msleep(50);

    } 

}

期待どおりに動作しません...最終的な効果しか見えないので、最後の呼び出し: changeBrightness(*image, 50);

関数の終了後にのみ、フォームの変更がユーザーに表示されるようですが、そうですか? そのような「アニメーション」を作る他の方法はありますか?

4

1 に答える 1

1

ボタンの画像を更新した後、Qt にウィジェットを再描画する時間を与えません。これは、ループに陥っているためです。画像の更新が完了して初めて、Qt はウィジェットを再描画できるようになります。これが、最終結果のみを表示する理由です。

QTimerを調べます。QTimer::setInterval を使用して、タイムアウトを 50 ミリ秒に設定できます。次に、ボタンの画像の色を変更するスロットを QTimer::timeout に接続します。このスロットはコードによく似ていますが、ループはありません。たとえば、スロットの各呼び出しは、ループの単一の反復です。最後に、アニメーションを開始または停止するには、QTimer::start または QTimer::stop を呼び出します。

于 2016-08-26T13:51:55.107 に答える