c++端的类,作为组件在qml端使用

qml使用c++端的类,作为组件在qml端使用

这个类必须继承QObject
这个类必须继承QObject

#ifndef COLLISIONALARM_H
#define COLLISIONALARM_H

#include <QObject>

class CollisionAlarm : public QObject
{
    Q_OBJECT

	//这个宏就叫做反射机制,让qml端直接使用该变量
	//qt5.14版本以后,鼠标光标放在变量处,按下alt+enter,快捷生成set get notify
    Q_PROPERTY(QPointF endPoint READ getEndPoint WRITE setEndPoint NOTIFY ycnEndPointChanged)
	

public:
    explicit CollisionAlarm(QObject *parent = nullptr);

    QPointF getStartPoint() const;
    void setStartPoint(const QPointF &value);

    QPointF getEndPoint() const;
    void setEndPoint(const QPointF &value);

     void onTimeout();

signals:
     void ycnEndPointChanged();

private:

    QPointF endPoint;
};

#endif // COLLISIONALARM_H

#include "collisionalarm.h"
#include<QTimer>

#include<QDebug>
CollisionAlarm::CollisionAlarm(QObject *parent) : QObject(parent)
{
    QTimer *timer = new QTimer(this);
    connect(timer, &QTimer::timeout, this, &CollisionAlarm::onTimeout);
    timer->start(1000);


    endPoint.setX(30.6600465788062);
    endPoint.setY(104.06294724255133);

}
void CollisionAlarm::onTimeout()
{
	//一定要把这个信号发出去,qml端才能时刻获得endPoint的值
    emit ycnEndPointChanged();
    qDebug()<<endPoint;
}

QPointF CollisionAlarm::getStartPoint() const
{
    return startPoint;
}

void CollisionAlarm::setStartPoint(const QPointF &value)
{
    startPoint = value;
}

QPointF CollisionAlarm::getEndPoint() const
{
    return endPoint;
}

void CollisionAlarm::setEndPoint(const QPointF &value)
{
    endPoint = value;
}

找个地方写这段代码,把这个类注册到qml系统反射机制,qml才能识别

 qmlRegisterType<CollisionAlarm>("CollisionAlarm", 1, 0, "CollisionAlarm");

来到qml这端

先导入这c++这端的组件(就上面那个类)
import CollisionAlarm 1.0


//直接使用上面这个类
CollisionAlarm{
    id:collisionWarn
    property var fendPoint: endPoint;
	//这个槽可以监测属性变化
    onEndPointChanged: {
       console.log("lat","lon",fendPoint.x,fendPoint.y)
    //    collision_line.append({"lat_collision":fendPoint.x,"lon_collision":fendPoint.y});
       // collision_line.addCoordinate(QtPositioning.coordinate(fendPoint.x,fendPoint.y));
      //  control.helicopter_.appendpoint("quhi",QtPositioning.coordinate(fendPoint.x,fendPoint.y),3500)
   }
}
相关推荐
小灰灰搞电子8 天前
QML 快捷键与Shortcut的使用
qt·qml
小灰灰搞电子8 天前
QML使用ChartView绘制折线图
qt·qml
码农客栈13 天前
qml Page详解
qml
Ricardo于1 个月前
★3.3 事件处理
qml
梦起丶1 个月前
Qml 中实现时间轴组件
qt·ui·时间轴·控件·qml
梦起丶1 个月前
Qml 中实现任意角为圆角的矩形
qt·ui·控件·qml
码农客栈1 个月前
qml XmlListModel详解
qml
小灰灰搞电子1 个月前
QML states和transitions的使用
qt·qml
码农客栈1 个月前
qml SpringAnimation详解
qml
人才程序员2 个月前
Windows11 安卓子系统存储位置更改
android·c语言·c++·qt·qml·界面