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

相关推荐

  1. c++作为组件qml使用

    2024-07-21 20:40:04       16 阅读
  2. 关于Nuxt.js 服务组件使用

    2024-07-21 20:40:04       51 阅读
  3. 【html5video标签移动使用

    2024-07-21 20:40:04       17 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 20:40:04       57 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 20:40:04       60 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 20:40:04       48 阅读
  4. Python语言-面向对象

    2024-07-21 20:40:04       60 阅读

热门阅读

  1. Python笔记(3)

    2024-07-21 20:40:04       14 阅读
  2. 生成表的DDL语句没有字段描述和表名描述

    2024-07-21 20:40:04       16 阅读
  3. bitset和set总结

    2024-07-21 20:40:04       13 阅读
  4. Flask校验

    2024-07-21 20:40:04       19 阅读
  5. 基带成型(脉冲成形)

    2024-07-21 20:40:04       20 阅读
  6. mysql索引篇

    2024-07-21 20:40:04       19 阅读
  7. FedAvg

    FedAvg

    2024-07-21 20:40:04      16 阅读
  8. 我在vue2重生之vite加强版

    2024-07-21 20:40:04       17 阅读
  9. 2024.7.20 暑期训练记录(6)

    2024-07-21 20:40:04       16 阅读
  10. 调用第三方接口-OkHttpClient

    2024-07-21 20:40:04       20 阅读
  11. C Prinmer Plus笔记第1-6章

    2024-07-21 20:40:04       18 阅读