让我们看一下plugin项目的目录结构
/plugin$ tree . ├── hello.pro ├── imports │ └── demo │ ├── hello.qml │ └── qmldir ├── plugin.cpp └── test.qml这个plugin项目的名称为hello, hello.pro是project file。所有的文件都位于plugin目录下,你可以自由的修改这个plugin目录名称。
我已经在前面的文章中介绍了test.qml文件, 这只是一个测试用的qml文件,并不属于plugin的一部分。
plugin.cpp文件是一个C++实现文件,它包含了一个被暴露出来的C++类。
看一下imports/demo/hello.qml文件,这个文件里面所有的qml对象都被当作Hello class用在了test.qml文件中。实际上,hello.qml文件中没有定义这个名字,它被定义在imports/demo/qmldir文件中,我稍后会讨论qmldir文件。
hello.qml文件的内容显示如下:
import QtQuick 2.0 Rectangle { width: 200; height: 200; color: "gray" Text { font.bold: true; font.pixelSize: 14; y:200; color: "white" anchors.horizontalCenter: parent.horizontalCenter } }这只是一个普通的qml文件,包含了一个rectangle.
qmldir文件非常重要,现在看一下它的内容:
module demo Hello 1.0 hello.qml plugin hello
参考官方文档可以获得更多信息:
http://doc-snapshot.qt-project.org/qdoc/qtqml-modules-qmldir.html
第二行定义了一个Hello class,,来自hello,qml文件中。前面已经介绍过了。
第三行,hello意思是这个C++ 动态库的文件名,比如,在Ubuntu上,应该是libhello.so,在Windows上,应该是hello.dll. 不要把它当作从plugin库中导出的C++类的名称,因为我们可以从一个库中导出多个C++类。
作为一个总结,我画了一个图表示plugin的结构。