自定义QML扩展插件与调用一步一脚印

2023-10-10 00:50

本文主要是介绍自定义QML扩展插件与调用一步一脚印,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

环境:Win10,Qt5

可以参考help文档->QML Plugin Example&QQmlExtensionPlugin Class

  1. 建立工程

定义的c++类为MyWin,URL为默认模块名(2者必须一致,无需大小写匹配)

目录结构图

   2.C++里定义QML类型

mywin里头可以在C++里定义QML类型,可以参考help文档->Defining QML Types from C++

如下代码:

class MyWin : public QQuickItem
{Q_OBJECTQ_DISABLE_COPY(MyWin)Q_PROPERTY(QString str READ string )//定义QML可利用的属性
public Q_SLOTS:QString string(){return "custom plugin"; }//与上方的READ string对应,QML可利用的方法,因为槽函数和信号都是可以在QML中获得
public:MyWin(QQuickItem *parent = nullptr);~MyWin();
};
myWin_plugin里头注册c++类和注册插件于Qt meta object systemqmlRegisterType<MyWin>(uri, 1, 0, "MyWin");//MyWin是c++类显示给QML的组件名,可以随便修改

3.定义QML组件

如Win.qml代码:

import QtQuick 2.0
import QtQuick.Window 2.11Window {title: "Win"width: 500height: 400color: "blue"
}

4.*.pro设置

uri = mywin #设定模块名

#DLLDESTDIR指定的目录必须为模块名,$$PWD指的是项目所在目录不是编译所在目录
#作用是生成插件所在目录
#This variable applies only to Windows targets.
#Specifies where to copy the
target dll. DLLDESTDIR=$$PWD/ModuleName

其实Unix平台上更简单,install直接COPY所有所需文件,windows这个DLLDESTDIR只能copy c++类的DLL文件

其他所需文件手动移动

5.设置qmldir

module mywin //模块名
Win 1.0 Win.qml  //qml文件指定
plugin MyWin//插件名

再次提醒,模块名必须与插件名一致

插件所在文件夹名必须与模块名一致

6.整理mywin目录文件
 

7.调用插件

 engine.addImportPath("../");//engine应该知道,添加路径为插件所在的上层目录

8.typeinfo plugin_name.qmltypes

需自己生成,不然无法语法高亮。可以参考HELP文档->Writing a qmltypes File

我这里好像不行,不知道是那种情况,不影响效果,就懒得手动生成了。

但可以在*.pro中设置

QML_IMPORT_PATH =../mywin   #mywin为插件所在目录
#这样可以代替typeinfo plugin_name.qmltypes来支持语法高亮
#注意只能使用系统标准路径语法,即‘../’而不是使用Qt宏来设置,如$$PWD/mywin,这样时无法高亮的
#这样对于qml组件和c++定义的qml组件都可以语法高亮了

上运行图:

一切预期一样。

 

 

这篇关于自定义QML扩展插件与调用一步一脚印的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/176760

相关文章

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制