qml_c++互相调用

qml_c++互相调用

  1. 注册c++的对象到qml

1.1 注册某个类到qml

注册c++的myHttpRequest对象,到qml的引擎中;

QQmlApplicationEngine engine;

QScopedPointer<myHttpRequest> myHttprequest(new myHttpRequest(runMode));

engine.rootContext()->setContextProperty("myHttprequest",myHttprequest.data());

1.2 注册某个组件到qml,当成控件来使用

(1)注册到qml

qmlRegisterType<WorkTaskPool>("MyWorkTaskPool", 1,0, "MyWorkTaskPool");  // qml里面的异步线程;

(2)SDPWorkThread.qml里面的内容

import MyWorkTaskPool 1.0

//异步线程组件

MyWorkTaskPool {

}

(3)LoginWindow.qml里面内容

function dealThreadThing(){

  //异步处理

//      loginThread.setObject(loginWindow)

        loginThread.setObject(root) // => c++函数,调用main.qml里面的workAfterLogin函数;

        loginThread.setfunName("workAfterLogin")  // 显示托盘信息;

        loginThread.taskStart()

    }

 SDPWorkThread{

        id: loginThread

 }

2. qml函数调用c++函数

2.1 qml中的函数:

 function postFindAddr() {

        var url = "https://xx/api/browser/init"

        var tid = companyCode_TF.text

        var contentType = "application/json"

        var userAgent = "surfBrowser/2.0.0.1"

// qml调用c++函数;

        myHttprequest.initAddrResource(url,userAgent,contentType,tid,1)   

    }

2.2 c++的函数被qml调用

class myHttpRequest:public QObject

{

    ……;

Q_INVOKABLE void initAddrResource(QString url, QString userAgent, QString contentType, QByteArray tid,RequestMethod method);

      ……;

};

3. c++调用qml里面的函数;

3.1 获取qml中的主窗口对象

QObject* root = NULL;

    QList<QObject*> rootObjects = engine.rootObjects();

    for(int i = 0; i<rootObjects.size();i++)

    {

        if(rootObjects.at(i)->objectName() == "rootObject")

        {

            root = rootObjects.at(i);

            break;

        }

    }

3.2 c++调用qml里面的函数的方法:

QMetaObject::invokeMethod(m_root, "setRootVisible",Q_ARG(QVariant,false));

void SDPSysTrayIcon::onExit()

{// cpp中的函数;

    m_systemTray->hide();

    QMetaObject::invokeMethod(m_root, "setRootVisible",Q_ARG(QVariant,false));

    QMetaObject::invokeMethod(m_root, "logOut");

    QApplication::exit(0);

}

3.3 qml里面的函数

    function setRootVisible(flag){

        root.visible = flag

}

demo程序:https://download.csdn.net/download/onlyfunboy/20089302

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值