以下是一个简单的示例,展示如何创建一个自定义的圆形进度条控件。
1.创建一个新的Qt控件类,继承QProgressBar类。在该类的头文件中添加以下代码:
class CircularProgressBar : public QProgressBar
{
Q_OBJECT
public:
CircularProgressBar(QWidget* parent = nullptr);
protected:
void paintEvent(QPaintEvent* event) override;
};
2.在源文件中实现构造函数和绘制事件:
CircularProgressBar::CircularProgressBar(QWidget* parent)
: QProgressBar(parent)
{
//设置样式表,去掉默认边框和背景
QString styleSheet = "QProgressBar {border: none; background: none;}";
setStyleSheet(styleSheet);
}
void CircularProgressBar::paintEvent(QPaintEvent* event)
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
QRectF rectangle(0.0, 0.0, width(), height());
int startAngle = 90 * 16; //开始角度为90度,转换成16进制
int spanAngle = -360 * 16 * value() / maximum(); //根据当前值计算角度,顺时针转动为负
painter.setPen(Qt::NoPen);
painter.setBrush(palette().highlight());
painter.drawEllipse(rectangle);
painter.setBrush(palette().base());
painter.drawPie(rectangle, startAngle, spanAngle);
}
3.将该控件添加到应用程序中:
CircularProgressBar* progressBar = new CircularProgressBar(parentWidget);
progressBar->setRange(0, 100);
progressBar->setValue(50);
这个自定义圆形进度条控件将继承QProgressBar类的所有基本行为和属性,但具有独特的外观和动画效果。它通过重写paintEvent()函数来自定义绘制,并使用setStyleSheet()函数来设置样式表。通过Qt的绘图功能,可以实现圆形绘制和动画效果。