在没有画布的QML中绘制虚线圆

时间:2018-07-16 08:55:28

标签: qt canvas qml

我想画一个虚线圆,其半径将根据变量而增加或缩小。我只找到了基于Canvas的解决方案:Qt (QML) Dashed Circle

我还没有找到其他解决方案,我感到有些惊讶。恐怕Canvas解决方案会消耗太多资源。还有其他实用方法吗?

1 个答案:

答案 0 :(得分:6)

如果您不想使用画布,则另一种方法是使用#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.h

#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);
}

dashcircle.cpp:

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

注册类型:

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

在qml中创建:

DesktopAppConverter.exe -Cleanup ExpandedImage

结果:

circle