如何在 Qt C++中调用QML的JS函数。这里我们假象一个例子。它是这样的。 我们在Qt C++中进行网络的监测,并把不同的状态发送给QML的 JS的某个Function。然后该Function收到该状态进行处理,最后更新UI(这里我们把这个状态显示到一个Label中)。
基本思路与具体步骤基本思路,把你的Qt C++中的对象暴露给QML端,然后利用signals-slots 进行连接,并传递消息。具体步骤如下
1 创建自己的对象,如果你的对象是要显示在QML端,可以继承QDeclarativeItem,如果只是一个控制类,而不需要显示在QML端,只需要继承QObject。这里用到数据绑定请参考Using QML Bindings in C++ Applications
#include
class NetConnectController : public QObject
{
Q_OBJECT
Q_PROPERTY(int status READ status WRITE setStatus NOTIFY statusChanged)
public:
explicit NetConnectController(QObject *parent = 0);
void Ready()
{
emit statusChanged( m_status);
}
signals:
void statusChanged(int aStatus);
private:
int status() const;
void setStatus(int aStatus);
private :
//表示网络不同的状态
int m_status;
};
2 暴露你的对象给QML
…
NetConnectController netController
QDeclarativeEngine * engine = viewer.engine();
(engine->rootContext())->setContextProperty(“NetController”,&netController);
…3在QML中连接Signal-slot
…
Connections
{
target: NetController
onStatusChanged:changeStatus(aStatus)//Call JS Function
}
…注意:上面的onStatusChanged 命名格式 “on”+“Qt C++中的signal名字”。在QML端可以直接使用Qt C++端的参数。例如上面的"aStatus"。