위젯의 paintEvent
을 무시하면서 순환 진행 바를 qt에서 수행 할 수 있고 순환 진행 바를 그릴 수 있지만 두 번째 순환 진행 바 (다음과 같이 그릴 수 없음)를 사용하면 주 원형 진행 바 뒤에 어려움이 있습니다.Qt의 사용자 정의 원형 진행 바
아무도 나를 통해 안내 할 수 있습니까? 미리 감사드립니다.
위젯의 paintEvent
을 무시하면서 순환 진행 바를 qt에서 수행 할 수 있고 순환 진행 바를 그릴 수 있지만 두 번째 순환 진행 바 (다음과 같이 그릴 수 없음)를 사용하면 주 원형 진행 바 뒤에 어려움이 있습니다.Qt의 사용자 정의 원형 진행 바
아무도 나를 통해 안내 할 수 있습니까? 미리 감사드립니다.
여기에서 문제가 보이지 않습니다. QPainterPath
을 사용하고 전체 또는 부분 아크 경로를 추가 한 다음 Qt::DotLine
스타일을 사용하여 QPen
경로를 그립니다.
void QPen::setDashPattern(const QVector<qreal> & pattern)
이처럼 보이는, 빠른 예입니다
주식 점선이 당신을 위해 작동하지 않는 경우
을 통해 specify a custom pattern에 대한 옵션이 있습니다class CPBar : public QWidget {
Q_OBJECT
qreal p; // progress 0.0 to 1.0
public:
CPBar(QWidget * p = 0) : QWidget(p), p(0) {
setMinimumSize(208, 208);
}
void upd(qreal pp) {
if (p == pp) return;
p = pp;
update();
}
void paintEvent(QPaintEvent *) {
qreal pd = p * 360;
qreal rd = 360 - pd;
QPainter p(this);
p.fillRect(rect(), Qt::white);
p.translate(4, 4);
p.setRenderHint(QPainter::Antialiasing);
QPainterPath path, path2;
path.moveTo(100, 0);
path.arcTo(QRectF(0, 0, 200, 200), 90, -pd);
QPen pen, pen2;
pen.setCapStyle(Qt::FlatCap);
pen.setColor(QColor("#30b7e0"));
pen.setWidth(8);
p.strokePath(path, pen);
path2.moveTo(100, 0);
pen2.setWidth(8);
pen2.setColor(QColor("#d7d7d7"));
pen2.setCapStyle(Qt::FlatCap);
pen2.setDashPattern(QVector<qreal>{0.5, 1.105});
path2.arcTo(QRectF(0, 0, 200, 200), 90, rd);
pen2.setDashOffset(2.2);
p.strokePath(path2, pen2);
}
};
class Test : public QWidget {
Q_OBJECT
public:
Test() {
QVBoxLayout * l = new QVBoxLayout(this);
CPBar * p = new CPBar;
QSlider * s = new QSlider(Qt::Horizontal, this);
s->setMinimum(0);
s->setMaximum(100);
l->addWidget(p);
l->addWidget(s);
setLayout(l);
connect(s, &QSlider::valueChanged, [=](){ p->upd((qreal)s->value()/s->maximum());});
}
};
그 전에 시도했지만 그게 내가 원하는 게 아니야 – elgolondrino
이것은 이미지의 결과를 얻는 방법입니다. – dtech
'dashedPattern' 만 사용했지만 360에서 일부 서클을주었습니다. 그들은 예상보다 컸습니다. – elgolondrino
두 번째 순환 진행률 막대는 무엇입니까? – eyllanesc
@eyllanesc 이미지에서 원형으로 부화 .... 파란색 진행 바 아래 – elgolondrino
관련 코드 또는 선호하는 [최소, 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)를 게시하십시오. –