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)
   }
}
相关推荐
人才程序员4 天前
【无标题】
c语言·前端·c++·qt·软件工程·qml·界面
人才程序员5 天前
Qt Widgets、QML与Qt Quick
c语言·开发语言·c++·qt·ui·qml
喵呜角角1 个月前
QML TableView 实例演示 + 可能遇到的一些问题(Qt_6_5_3)
开发语言·windows·qt·qml·qt quick
喵呜角角1 个月前
QML TableView(Qt_6_5_3_MinGW_64)
开发语言·qt·qml·qt quick
梦起丶1 个月前
Qml 中的那些坑(七)---ComboBox嵌入Popup时,滚动内容超过其可见区域不会关闭ComboBox弹窗
qt·qml
mengzhi啊2 个月前
几种QQuickWidget与Qml交互数据的方法
qml
QGC二次开发2 个月前
QML项目实战:自定义Combox
qt·qml·自定义控件·combox
for(::)2 个月前
QML旋转选择器组件Tumbler
qml
咩咩大主教2 个月前
VSCode导入QSS文件
css·c++·vscode·qt·qml·quick·qss
for(::)2 个月前
QML列表视图 ListView的使用
c++·qt·qml·1024程序员节