QML2与C++混合编程
来源:互联网 发布:淘宝如何进行实名认证 编辑:程序博客网 时间:2024/05/28 05:17
最近有Qter找我问下关于QML和C++混合编程的问题,问我qmlc++是如何交互的,我总结了三点:
//1.第一种C++与QML交互的方法//C++部分://这个方法在主类里面int main(int argc, char *argv[]){ QApplication a(argc, argv); NdooWebView ndooView(0); ndooView.resize(978,686); ndooView.show(); int i= a.exec(); ProjectManagerApi::getInstance()->stopRun(); return i;}//这个方法在主类NdooWebView里面void Widget::showMainQML(){ QDeclarativeView* noticeViewUi = new QDeclarativeView(0); noticeViewUi->setResizeMode(QDeclarativeView::SizeRootObjectToView); //noticeViewUi->setWindowModality(Qt::ApplicationModal); noticeViewUi->setWindowFlags(Qt::FramelessWindowHint|Qt::Dialog|Qt::WindowStaysOnTopHint); noticeViewUi->setAttribute(Qt::WA_TranslucentBackground); noticeViewUi->setStyleSheet("background:transparent;"); noticeViewUi->setViewportUpdateMode(QGraphicsView::FullViewportUpdate); noticeViewUi->setSource(QUrl("qrc:/qml/main.qml")); QGraphicsObject* noticeViewObj = noticeViewUi->rootObject(); connect(noticeViewObj,SIGNAL(signalMainMoveMent(int,QVariant)),this,SLOT(slotMovenoticeViewer(int,QVariant)));//signalMainMoveMent是qml里面的信号,slotMovenoticeViewer是本地的槽QMetaObject::invokeMethod(noticeViewUi->rootObject(),"ndooNoticeJsonString", Q_ARG(QVariant,QVariant::fromValue(str)));//这个是C++可以把str值传到qml的ndooNoticeJsonString方法里面 str可以作为ndooNoticeJsonString的参数}//qml部分:import QtQuick 1.1Rectangle { id: name width: 280; height: 180 signal signalMainMoveMent(int cmd,variant lst);//可以连接c++中的那个信号槽 property variant lstData: [] property int totalNum: 1 property int currentNum: 1 property int curPage: 1//这个控件触发一个信号到它的parent InoticeViewTopQml{ id:top anchors.left: parent.left anchors.right: parent.right anchors.top: parent.top onSignalItemMoveMent: { signalMainMoveMent(cmd,lst); } } ListModel{ id:notiModel }ListView{id:lstView}//就是C++里面的注册的方法function ndooNoticeJsonString(str){var tmp = str;//做你想做的一些事情}}======================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>//2.第2种C++与QML交互的方法//C++部分//定义一个接口类:datainterface"datainterface.h"class DataInterface : public QObject{ Q_OBJECT Q_PROPERTY(QString strError READ getError WRITE setError)public: explicit DataInterface(QObject *parent = 0); QString getError(){ return strError;} void setError(const QString& error){strError = error;}signals: void signalResponseDataReady(bool error,int cmd,QStringList finalData); void signalNotifyUI(bool error,int cmd,QStringList notifyData);public slots: void slotRequestData(int cmd,QStringList parameterList); void slotResponseNotifyUI(bool error,int cmd,QStringList processResult); //qml notify widget to close //process widget singal void slotPcsamResponseDataReady(bool error,int cmd,QStringList finalData); void slotPcsamNotifyUI(bool error,int cmd,QStringList notifyData); void creatConnection(); void slotdownloadOpenFile();private: QString strError; bool isConnected;};"datainterface.cpp"#endif // DATAINTERFACE_H#include "datainterface.h"DataInterface::DataInterface(QObject *parent) : QObject(parent),isConnected(false){ creatConnection();}void DataInterface::slotRequestData(int cmd, QStringList parameterList){//Widget为主类,以下类似 Widget::instance()->requestData(cmd,parameterList); //PCSAM::instance()->slotRequestData(cmd);}void DataInterface::slotResponseNotifyUI(bool error, int cmd, QStringList processResult){ Widget::instance()->responseNotifyUI(error,cmd,processResult);}//====================process pcsam signal======================================void DataInterface::slotPcsamNotifyUI(bool error,int cmd, QStringList processResult){ emit signalNotifyUI(error,cmd,processResult);}void DataInterface::slotPcsamResponseDataReady(bool error, int cmd, QStringList finalData){ emit signalResponseDataReady(error,cmd,finalData);}//=======================creat connection in first request(connection depdent instance)==========================void DataInterface::creatConnection(){ connect(Widget::instance(),SIGNAL(signalNotifyUI(bool,int,QStringList)),this,SLOT(slotPcsamNotifyUI(bool,int,QStringList))); connect(Widget::instance(),SIGNAL(signalResponseDataReady(bool,int,QStringList)),this,SLOT(slotPcsamResponseDataReady(bool,int,QStringList)));}//QML部分:import MyDataPool 1.1//这个为main里面注册的接口类import com.nokia.extras 1.1//*Item{//cmd为信号的第一个参数指代哪个命令DataPool{ id:dataPool onSignalNotifyUI:{ if(!error){ switch(cmd){ case WIFI_GET_MODEL:{ console.log("--------ddddd----"+ notifyData); if(notifyData[1]=="unknown") { dlg.currentDevice = "Android Device" return; } dlg.currentDevice = notifyData[1] }break;}}}onSignalResponseDataReady: { switch(cmd) { case TRADE_MS_REQUEST_MAINUI: { //cmd为信号的第一个参数指代哪个命令 if(finalData[0] == "1") { //connectingTips } else if(finalData[0] == "2") { } }break; } }}}#include "dataInterface.h"#include <QtDeclarative>int main(int argc, char *argv[]){ QApplication a(argc, argv);qmlRegisterType<DataInterface>("MyDataPool",1,1,"DataPool");//main注册接口类 int i= a.exec(); ProjectManagerApi::getInstance()->stopRun(); return i;}//具体使用情况多参考QML与C++交互文档
细看见文档:QML与C++交互实例
另外添加以下官方的说明QML2 C++
- QML2与C++混合编程
- qml1与qml2
- C与shell混合编程
- C与C#混合编程
- C与C++混合编程
- nasm与c混合编程
- Lua 与 C混合编程 .
- ARM与C混合编程
- c与c++混合编程
- C与汇编混合编程
- C与C++混合编程
- matlab与C混合编程
- matlab与c混合编程
- C与C++混合编程
- C与C++混合编程
- C与汇编混合编程
- matlab与C混合编程
- C与汇编混合编程
- 即时聊天IM
- dwr报警Missing type info for method(0). Assuming this is a map with String keys
- 将web工程名设置为ROOT的好处
- 数据块的内容和参数
- JaxbContext生成xml文件或java类对象转化注解
- QML2与C++混合编程
- VC显示网页验证码、模拟CSDN网页登录
- 如何用mysql增加字段
- 自动的段空间管理
- 浅谈框架
- rpmdb errors
- hadoop过时了?
- java 获取系统时间错误,少了8小时
- 美丽的英文诗句【2】