×
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.
173 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×