gpt4 book ai didi

c++ - 循环进度指示

转载 作者:可可西里 更新时间:2023-11-01 18:15:51 31 4
gpt4 key购买 nike

我正在为 Qt5 搜索循环进度指示小部件,如下所示: http://anthonyterrien.com/knob/

有没有类似的东西或者可以在 Qt 中做到这一点?

我想手动设置百分比,它不应该是一个旋转的圆圈或类似的东西

最佳答案

很容易写。您只需要特殊的 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

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)+" %");
}

用法:

Widget wd; 
wd.show();
QSlider sl;
sl.show();

QObject::connect(&sl,SIGNAL(valueChanged(int)),&wd,SLOT(setProgress(int)));

结果:

enter image description here

我在这里展示了主要思想,但我认为我的代码可以改进,例如添加方法 setMinimum/MaximumsetValue,如 QProgressBar,但我希望您在需要时手动添加其他功能。

关于c++ - 循环进度指示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30003891/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com