本文主要是介绍自定义QML扩展插件与调用一步一脚印,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
环境:Win10,Qt5
可以参考help文档->QML Plugin Example&QQmlExtensionPlugin Class
- 建立工程
定义的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扩展插件与调用一步一脚印的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!