Che*_*byl 16
写起来很容易.你需要特殊paintEvent()和插槽setProgress().当然,如果你想增加更多美感,那么你需要花一些时间,但这里有一个例子:
标题:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPaintEvent>
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
signals:
public slots:
void setProgress(int val);
protected:
void paintEvent(QPaintEvent *);
private:
double progress;
};
#endif // WIDGET_H
Run Code Online (Sandbox Code Playgroud)
CPP:
void Widget::setProgress(int val)
{
progress = (double)val/100;
//yes, it is not very good, the best approach is to
//create something similar to QProgressBar
this->update();
}
void Widget::paintEvent(QPaintEvent *)
{
QPainter p(this);
QPen pen;
pen.setWidth(7);
pen.setColor(Qt::red);
p.setPen(pen);
p.setRenderHint(QPainter::Antialiasing);
QRectF rectangle(10.0, 20.0, 80.0, 80.0);
//to understand these magic numbers, look drawArc method in Qt doc
int startAngle = -90 * 16;
int spanAngle = progress * 360 * 16;
p.drawArc(rectangle, startAngle, spanAngle);
p.drawText(rectangle,Qt::AlignCenter,QString::number(progress*100)+" %");
}
Run Code Online (Sandbox Code Playgroud)
用法:
Widget wd;
wd.show();
QSlider sl;
sl.show();
QObject::connect(&sl,SIGNAL(valueChanged(int)),&wd,SLOT(setProgress(int)));
Run Code Online (Sandbox Code Playgroud)
结果:

我在这里表现出的主要想法,但我认为我的代码可以改进,例如添加方法setMinimum/Maximum和setValue,如QProgressBar,但我希望你能添加额外的功能,如果手动你需要这个.
| 归档时间: |
|
| 查看次数: |
5880 次 |
| 最近记录: |