提高性能自定义进度条动画
Improve performance custom progress bar animation
我希望有一个自定义进度条,其进度通过自定义动画改变。我将有很多这个小部件的实例,所有这些实例都应该 运行 流畅且快速。
我的第一次尝试是使用常规 QProgressBar
,通过使用样式表对其进行自定义,然后使用 QPropertyAnimation
来设置状态变化的动画。
这工作正常但速度极慢。比方说,我以 0% 的值开始我的动画并上升到 50%,并希望在 500 毫秒的持续时间内完成。一点也不顺利,但是有三个清晰可辨的步骤。如果我放下样式表,它会很顺利地工作。
好吧,使用 QProgressBar 的派生 class 似乎工作正常,它比使用样式表快得多,尽管我必须自定义调整宽度和高度:
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();
仍在接受反馈或更好的解决方案!
我希望有一个自定义进度条,其进度通过自定义动画改变。我将有很多这个小部件的实例,所有这些实例都应该 运行 流畅且快速。
我的第一次尝试是使用常规 QProgressBar
,通过使用样式表对其进行自定义,然后使用 QPropertyAnimation
来设置状态变化的动画。
这工作正常但速度极慢。比方说,我以 0% 的值开始我的动画并上升到 50%,并希望在 500 毫秒的持续时间内完成。一点也不顺利,但是有三个清晰可辨的步骤。如果我放下样式表,它会很顺利地工作。
好吧,使用 QProgressBar 的派生 class 似乎工作正常,它比使用样式表快得多,尽管我必须自定义调整宽度和高度:
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();
仍在接受反馈或更好的解决方案!