在没有Canvas的QML中绘制虚线圆圈

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在没有Canvas的QML中绘制虚线圆圈相关的知识,希望对你有一定的参考价值。

我想绘制一个虚线圆,其半径将根据变量增大或缩小。我只发现了一个基于Canvas的解决方案:Qt (QML) Dashed Circle

我没有找到另一个解决方案,我有点惊讶。我担心Canvas解决方案会消耗太多资源。还有其他实用的方法吗?

答案

如果你不想使用Canvas,另一种方法是使用QQuickPaintedItem并自己画一个圆圈。实现看起来像这样:

dashcircle.h

#ifndef DASHCIRCLE_H
#define DASHCIRCLE_H

#include <QObject>
#include <QQuickPaintedItem>
#include <QPainter>

class DashCircle : public QQuickPaintedItem
{
    Q_OBJECT
public:
    explicit DashCircle(QQuickItem *parent = nullptr);

    virtual void paint(QPainter *painter);
};

#endif // DASHCIRCLE_H

dashcircle.cpp:

#include "dashcircle.h"

DashCircle::DashCircle(QQuickItem *parent) : QQuickPaintedItem(parent)
{

}

void DashCircle::paint(QPainter *painter)
{
    painter->setPen(QPen(Qt::DashLine));
    painter->drawEllipse(0, 0, width() - 1, height() - 1);
}

注册类型:

qmlRegisterType<DashCircle>("Custom", 1, 0, "DashCircle");

在qml中创建:

DashCircle {
    x: 50
    y: 50
    width: 50
    height: 50
}

结果:

circle

以上是关于在没有Canvas的QML中绘制虚线圆圈的主要内容,如果未能解决你的问题,请参考以下文章

canvas绘制虚线,虚线方框,虚线圆

Qt (QML) 虚线圆

为 Canvas 圆圈设置动画以在加载时绘制

无法用Canvas绘制一个合适的圆圈

canvas学习总结三:绘制虚线

canvas绘制箭头路径效果