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)
   }
}
相关推荐
机器视觉知识推荐、就业指导11 小时前
QML 批量创建模块 【Repeater】 组件详解
前端·c++·qml
m0_555762902 天前
qml 基本元素
qt·qml
钱彬 (Qian Bin)3 天前
QT Quick(C++)跨平台应用程序项目实战教程 5 — 界面设计
c++·qt·教程·音乐播放器·qml·qt quick
__ocean14 天前
qml中ComboBox组件onCurrentIndexChanged与onActivated的使用
qt·qml
钱彬 (Qian Bin)14 天前
QT Quick(C++)跨平台应用程序项目实战教程 3 — 项目基本设置(窗体尺寸、中文标题、窗体图标、可执行程序图标)
c++·人工智能·音乐播放器·qml·界面设计·qt quick
梦起丶22 天前
「 DelegateUI 」Ant-d 风格的 Qt Qml UI 套件
qt·ui·qml·ant-d·ui-kit
小灰灰搞电子2 个月前
QML 快捷键与Shortcut的使用
qt·qml
小灰灰搞电子2 个月前
QML使用ChartView绘制折线图
qt·qml
码农客栈2 个月前
qml Page详解
qml
Ricardo于3 个月前
★3.3 事件处理
qml