1:第一步,创建中间类
也就是自己定义一个继承于QObject 的类 Class Trans
这个类用来和qml进行绑定链接,不用主窗口类,尽量分开,不然关系太绕了
.H
#ifndef TRANSOBJ_H
#define TRANSOBJ_H
//TransObj.h
#pragma once
#include <QObject>
#include <QDebug>
#include <QString>
class Trans : public QObject //自己定义的类,需要继承与QObject
{
Q_OBJECT
public:
Trans();
~Trans();
public: //这个getValFromQml 加了Q_INVOKABLE 宏,代表和qml进行绑定
Q_INVOKABLE void getValFromQml(QString name,float v); //链接需要绑定的函数
signals:
void valueFromCpp(int val);
};
#endif // TRANSOBJ_H
.C++
#include "Transobj.h"
#include <QDebug>
#include <QString>
Trans::Trans()
{
}
Trans:: ~Trans()
{
}
void Trans::getValFromQml(QString name,float v)
{
qDebug()<<"Qml:"<<name<<"value:"<<v<<endl; //打印信息
}
2:在加载qml页面前将类进行绑定
在主窗口类里面定义一个 类对象
Trans trans //这就是为啥不用主窗口类来做中间类的原因,防止出现两个窗口
绑定操作
//函数名字千万别写错了,有几个很相近的接口
//其中的quickWidget是在qt界面设计里面添加的,qml只能通过这个添加页面的qt应用程序
ui->quickWidget->rootContext()->setContextProperty("trans",&trans);//绑定中间类
ui->quickWidget->setSource(QUrl::fromLocalFile(":/Qml/wk_001.qml")); //加载页面
3:在qml中使用
Slider { //滑块
id: slider
x: 84
y: 41
to: 50
from: -50
value: 0
stepSize: 0.1
Connections{
target: spinBox
onValueChanged:{
slider.value = spinBox.value
}
}
//在这里直接调用trans里面的函数就可以
onValueChanged: trans.getValFromQml("温度",slider.value);
}
当温度改变时,调用函数,传递参数,这样就可以根据传入的参数来设置不同的值了