Создание плагина
Qt Creator содержит мастер для создания плагина расширения QML QtQuick 2 (QtQuick 2 QML Extension Plugin), который можно найти в разделе Библиотека (Library) при создании нового проекта. Мы используем его для создания плагина с именем fileio
с объектом FileIO
для запуска в модуле org.example.io
.
Подсказка
Текущий мастер создает проект на основе QMake. Для создания проекта на основе CMake используйте пример из этой главы в качестве отправной точки.
Проект должен состоять из файлов fileio.h и fileio.cpp, которые объявляют и реализуют тип FileIO
, и файла fileio_plugin.cpp, содержащего настоящий класс плагина, который позволяет движку QML обнаруживать расширение.
Класс плагина является производным от класса QQmlEngineExtensionPlugin
и содержит макросы Q_OBJECT
и Q_PLUGIN_METADATA
. Весь файл можно увидеть ниже.
#include <QQmlEngineExtensionPlugin>
class FileioPlugin : public QQmlEngineExtensionPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID QQmlEngineExtensionInterface_iid)
};
#include "fileio_plugin.moc"
Расширение автоматически обнаружит и зарегистрирует все типы, отмеченные QML_ELEMENT
и QML_NAMED_ELEMENT
. Мы увидим, как это делается в следующем разделе «Реализация FileIO».
Чтобы импорт модуля работал, пользователю также необходимо указать URI, например, import org.example.io
. Интересно, что мы нигде не можем увидеть URI модуля. Это задается извне с помощью файла qmldir или в файле CMakeLists.txt вашего проекта.
Файл qmldir определяет содержимое вашего плагина QML или, что еще лучше, сторону QML вашего плагина. Написанный вручную файл qmldir для нашего плагина должен выглядеть примерно так:
module org.example.io
plugin fileio
Модуль – это URI, который импортирует пользователь, и после него вы указываете, какой плагин загрузить для указанного URI. Строка плагина должна совпадать с именем файла вашего плагина (под Mac это будет libfileio_debug.dylib в файловой системе и fileio в qmldir; для системы Linux та же строка будет искать libfileio.so). Эти файлы создаются Qt Creator'ом на основе предоставленной информации.
Более простой способ создать правильный файл qmldir – в файле CMakeLists.txt для вашего проекта в макросе qt_add_qml_module
. Здесь параметр URI используется для указания URI плагина, например, org.example.io. Таким образом, файл qmldir создается при сборке проекта.
При импорте модуля с именем org.example.io движок QML просматривает один из путей импорта и пытается найти путь "org/example/io" с помощью qmldir. Затем qmldir сообщает движку, для какого URI модуля какую библиотеку загружать в качестве плагина расширения QML. Два модуля с одинаковым URI переопределяют друг друга.