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 天前
装了新的QtCreator17,没有用Qt5.12自带的QtCreator4,导致QtCreator17无法找到Qt5.12帮助文档
qt·qml
奔跑吧 android5 天前
【Qt】【1. 版本特性介绍】
qt·cpp·qml
Wallace Zhang10 天前
PySide6 + QML - 多线程02 - QThread 生命周期与安全退出
vscode·pyside6·qml
江公望11 天前
如何在Qt QML中定义枚举浅谈
开发语言·qt·qml
Hi2024021712 天前
Qt+Qml客户端和Python服务端的网络通信原型
开发语言·python·qt·ui·网络通信·qml
江公望16 天前
Qt qmlplugindump浅谈
开发语言·qt·qml
江公望20 天前
Qt的QT_QPA_EGLFS_INTEGRATION环境变量浅解
linux·qt·qml
江公望24 天前
通过QQmlExtensionPlugin进行Qt QML插件开发
c++·qt·qml
江公望1 个月前
Qt QtConcurrent使用入门浅解
c++·qt·qml
ajassi20001 个月前
开源 C++ QT QML 开发(二)工程结构
linux·qt·qml