开发Qt Plugin 2

让我们看一下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

第一行定义了名为demo的模块。注意,这个模块名可以用.进行分隔。规则是import path 和 domain名称的组合会指向qmldir文件的位置。在这个例子中,import file path是相对路径./imports,位于plugin目录下。添加demo路径后,真正的路径变成了./imports/demo/,这是对的,所以qmldir文件可以被正确的定位。

参考官方文档可以获得更多信息:

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的结构。

开发Qt Plugin 2_第1张图片






你可能感兴趣的:(qt,qml)