×
Namespaces

Variants
Actions

在Qt C++中调用QML中的Javascript Function

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

代码示例
兼容于
平台:
Symbian

文章
cuizhan 在 08 Sep 2011 创建
最后由 hamishwillee 在 11 Oct 2012 编辑

Contents

介绍

如何在 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<QObject>
    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"。

示例程序

File:QtCallQmlJs.zip

相关链接

Qt Quick (Chinese)

This page was last modified on 11 October 2012, at 04:17.
247 page views in the last 30 days.
×