0

カスタム アニメーションによって進行状況が変化する、カスタマイズされた進行状況バーを探しています。このウィジェットにはかなりの数のインスタンスがあり、それらはすべてスムーズかつ高速に実行されるはずです。

私の最初の試みは、通常QProgressBarの を使用し、スタイルシートを使用してカスタマイズし、 を使用しQPropertyAnimationてステータスの変化をアニメーション化することでした。

これは正常に動作しますが、非常に遅いです。たとえば、アニメーションを 0% の値から開始して 50% まで上げ、これを 500 ミリ秒の間に実行したいとします。まったく滑らかではありませんが、明確に区別できる 3 つのステップがあります。スタイルシートをドロップすると、十分スムーズに動作します。

4

1 に答える 1

1

QProgressBar の派生クラスを使用するとうまくいくように見えますが、幅と高さをカスタム調整する必要がありますが、スタイルシートを使用するよりもはるかに高速です。

void ColorBar::paintEvent(QPaintEvent *pe)
{
    QRect region = pe->rect();
    QPainter painter(this);

    QColor borderColor;
    borderColor.setNamedColor("#a0a0a0");
    QColor lightColor = QColor(255, 255, 255);
    QColor darkColor = QColor(225, 225, 225);

    int barHeight = static_cast<int>(height() * 1. / 4. + 0.5);

    QRect drawRect(0, static_cast<int>(height() / 2. - barHeight / 2. + 0.5), width() * .9 * value() / maximum(), barHeight);

    QLinearGradient g(drawRect.topLeft(), drawRect.bottomLeft());
    g.setColorAt(0., lightColor);
    g.setColorAt(1., darkColor);

    painter.setPen(QPen(borderColor));
    painter.setBrush(QBrush(g));

    painter.drawRect(drawRect);
}

このバーのアニメーション化は簡単で高速です。

        QPropertyAnimation* x = new QPropertyAnimation(percentageBar, "value");
        x->setStartValue(percentageBar->value());
        x->setEndValue(newValue);
        x->setDuration(500);
        x->start();

フィードバックやより良い解決策をお待ちしています!

于 2016-05-16T10:42:54.097 に答える