Qt-QML-QML调用C++类
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_OBJECT
public:
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_OBJECT
public:
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.5
import QtQuick.Controls 1.4 import TCpp 1.0 ApplicationWindow {
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",,,"TCpp");
注意,这句话必须卸载QML引擎的前面,不然是没法使用的
Qt-QML-QML调用C++类的更多相关文章
- 29.qt quick-在QML中调用C++类
1.Qml调用C++类 Qt QML模块提供了一组API,用来将C++类扩展QML中.您可以编写扩展来添加自己的QML类型,扩展现有的Qt类型,或调用无法从普通QML代码访问的C/C++函数本章将学习 ...
- 在 QML 中使用 C++ 类和对象
Qt Quick 技术的引入,使得你能够快速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的,也有很多局限性,原来 Qt 的一些技术,比如低阶的网络编程如 QTcpSocket ...
- QT创建与调用Dll方法(包括类成员)--显式调用
看网上的好多关于QT调用Dll的方法,大部分都是调用函数的,并没有调用C++类成员的情况,即使是有,比如说: 使用Qt编写模块化插件式应用程序 Qt 一步一步实现dll调用(附源码)---(这一篇里没 ...
- Qt一个project调用还有一个project的类成员变量
一句两句话已经不能表达如今的激动情绪了.唯有感叹知识的博大精深,并把感叹转变为文字. 同一个project调用其它类成员变量很easy. 如: 定义 Test1.h中申明成员变量 class A { ...
- QT 安卓 调用java类
用以下方式即可调用java类中的方法 QAndroidJniObject activity = QtAndroid::androidActivity(); QAndroidJniObject Devi ...
- QT中QProcess调用命令行的痛苦经历(调用Winrar,设置工作目录,获得输出,注意引号与括号,等等)
QT中QProcess调用命令行的痛苦经历 阅读目录 创建压缩包的方法 在QT中调用命令行 在QT中调用C++创建的dll 在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在Q ...
- Qt 中用QProcess调用cmd命令
项目做到一定阶段,常常须要在原来的project上调用外部程序. Qt为此提供了QProcess类,QProcess可用于完毕启动外部程序,并与之交互通信. 基本用法: QProcess p(0); ...
- QT学习之文件系统读写类
#QT学习之文件系统读写类 QIODevice QFileDevice QBuffer QProcess 和 QProcessEnvironment QFileDevice QFile QFileIn ...
- qt 创建及调用QT的 DLL
先讲一下对QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法 2.显示链接DLL,调用DLL中类对象.成员函数.(通过对象即可实现类成员函数 ...
随机推荐
- 禁用U盘的两种方法
方法一:注册表 计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet003\Services\USBSTOR 更改值为4即可,恢复时同理 ,重启即可 方法二:组策略
- 【题解】洛谷P3959 [NOIP2017TG] 宝藏(状压DP+DFS)
洛谷P3959:https://www.luogu.org/problemnew/show/P3959 前言 NOIP2017时还很弱(现在也很弱 看出来是DP 但是并不会状压DP 现在看来思路并不复 ...
- HDU 1009 FatMouse' Trade(简单贪心)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1009 FatMouse' Trade Time Limit: 2000/1000 MS (Java/O ...
- HDU 1207 汉诺塔II (找规律,递推)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1207 汉诺塔II Time Limit: 2000/1000 MS (Java/Others) ...
- HDU 2031 进制转换(10进制转R进制)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2031 进制转换 Time Limit: 2000/1000 MS (Java/Others) M ...
- java 编写小工具 尝试 学习(七)
1.在java 编写小工具 尝试 学习(六)里学会了,控件 的随意摆放, 以及大小(x,y,width,height),又根据前面学习的按钮 被点击 的事件监控 的方法 ,点击 按钮 在显示区域显示“ ...
- 轻量ORM-SqlRepoEx (十)SqlRepoEx Nuget包下载说明
ORM-SqlRepoEx 是 .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵 ...
- 免安装版MySQL8数据库的安装
[环境准备] PC版本:Windows10企业版.64位操作系统 数据库:MySQL8.0.12-win64.zip免安装版 [彻底卸载已安装的MySQL数据库] 由于系统中MySQL数据库的卸载不彻 ...
- 生产环境MySQL数据库集群MHA上线实施方案
生产环境MySQL数据库集群MHA上线实施方案 一.不停库操作 1.在所有节点安装MHAnode所需的perl模块(需要有安装epel源) yum install perl-DBD-MySQL -y ...
- vim ,vi总是卡死,终于找到原因了。
玩了这么多年linux 居然不知道这个..特此记录. 使用vim时,如果你不小心按了 Ctrl + s后,你会发现不能输入任何东西了,像死掉了一般,其实vim并没有死掉,这时vim只是停止向终端输出而 ...