Qt-QML-QML调用C++类
来源:互联网 发布:程序员代码图 编辑:程序博客网 时间:2024/06/06 18:15
QML用来做界面,在不考虑数据的请款下,那是溜溜的,但是,程序是没有不和后台数据交互的,但是了,QML在数据处理方面的效率又是不敢恭维的,这里就出现了QML负责前端界面,而后端使用JS或者C++了。
那么,QML调用C++有两种方式,这里详细需要看以为大神提供的内容,放上大神链接http://blog.csdn.net/foruok/article/details/32698603
这两就讲一下这两种调用的区别及用法
注意 下面的内容都是按照我的理解来的,如果有什么错误,还请指出
上结构图
第一种方式,把一个C++类注册成为一个QML的全局属性,这样,这个属性在任何时候任意地方都可以被QML文件调用,就和每一个QML空间的属性一样简单
我的PCpp类就是被我注册成为了一个QML的全局属性
下面是详细代码
PCpp.h
#ifndef PCPP_H#define PCPP_H#include <QObject>class PCpp : public QObject{ Q_OBJECTpublic: explicit PCpp(QObject *parent = 0); Q_INVOKABLE void showLog();};#endif // PCPP_H
PCpp.c
#include "pcpp.h"#include <QDebug>PCpp::PCpp(QObject *parent) : QObject(parent){}void PCpp::showLog(){ qDebug()<<"PCpp";}
没有具体的内容,这里就是输出了一行LOg
运行截图
第二种方式了,在我理解看来,就是吧C++注册成为一个QML的组件,类似BUtton等空间
那么在中方式,首先需要注意的就是
必须在QML程序之前创建,不然QML不识别
还有就是,当我们想要使用的时候,是必须初始化出来这个组件才可以了,这个在跨文件使用的时候会有许多问题。
上详细代码
TCpp.h
#ifndef TCPP_H#define TCPP_H#include <QObject>class TCpp : public QObject{ Q_OBJECTpublic: explicit TCpp(QObject *parent = 0); Q_INVOKABLE void showLog();};#endif // TCPP_H
TCpp.cpp
#include "tcpp.h"#include <QDebug>TCpp::TCpp(QObject *parent) : QObject(parent){}void TCpp::showLog(){ qDebug()<<"TCpp";}
运行截图
QML文件调用
import QtQuick 2.5import QtQuick.Controls 1.4import TCpp 1.0ApplicationWindow { visible: true width: 640 height: 480 title: qsTr("Hello World") MouseArea { anchors.fill: parent onClicked: { Demo1.showLog() mytcpp.showLog() } } TCpp { id:mytcpp }}
这里剩下最为关键的,就是C++的注册部分
#include <QApplication>#include <QQmlApplicationEngine>#include <QQmlContext>#include "pcpp.h"#include "tcpp.h"int main(int argc, char *argv[]){ QApplication app(argc, argv); qmlRegisterType<TCpp>("TCpp",1,0,"TCpp"); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); QQmlContext *context = engine.rootContext(); PCpp *damo1 = new PCpp(); context->setContextProperty("Demo1",damo1); return app.exec();}
第一种方法就是使用
setContextProperty("Demo1",damo1);
第二种方法使用
qmlRegisterType<TCpp>("TCpp",1,0,"TCpp");
注意,这句话必须卸载QML引擎的前面,不然是没法使用的
阅读全文
2 0
- Qt-QML-QML调用C++类
- qt 中调用QML
- Qt QML
- Qt:QML:不同目录qml模块的调用
- QT-QML调用IOS原生通讯录
- qml
- QML
- QML
- qml
- QML
- QML
- qml
- QML
- QML
- Qt实例分析——QML调用C++方法, C++调用QML
- Qt:QML:JavaScript 和QML 语法错误表
- Qt:QML控件类关系图
- QML for QT 1
- tensorflow: arg_scope
- Hibernate事务操作
- Day1(电脑,java历史及jdk环境搭建,dos命令)
- 图片压缩
- js实现瀑布流效果
- Qt-QML-QML调用C++类
- SAP ABAP 特性相关表取数逻辑
- c++静态函数、变量
- HDU1069
- 线程Thread的理解
- serviceimpl
- android studio安装推荐教程
- software quailty assurance
- 特征选择-卡方检验