Как пользователи будут добавлять дополнительные функции в систему плагинов на основе QML?

0

У меня есть небольшое приложение, в котором пользователи могут создавать свои собственные плагины как QML файлы. Эти плагины получают уведомления об определенных событиях, а их пользовательские интерфейсы отображаются один за другим в TabView.

Однако некоторые плагины нуждаются в функциональных возможностях, которые не могут быть предоставлены через QML, например, при записи в файлы. Как я могу позволить моим пользователям расширять функциональность по своему усмотрению?

Теги:
qml
qt5.3

1 ответ

1
Лучший ответ

Ваш пользователь должен:

  1. Внедрите QObject в C++, который обеспечивает требуемую функциональность.
  2. Подкласс QQmlExtensionPlugin для регистрации этого QObject как типа QML.
  3. Создайте DLL (или SO или DYLIB) для # 1 и # 2 и напишите файл qmldir чтобы сообщить движку QML, как загрузить DLL.

EDIT: Qt Creator автоматизирует немного этого процесса для вас. Перейдите в "Файл" → "Новый файл или проект..." → "Проекты" → "Библиотеки" → "Qt Quick 2 Extension Plugin" -

Более подробную информацию об этом процессе можно найти в документации:

Примечание 1: Ваш пользователь не будет писать *.qml файл.

Примечание 2: Каждый плагин должен быть в своей собственной подпапке. Это связано с тем, что каждому плагину C++ нужен один файл qmldir, но вы не можете иметь несколько файлов qmldir в одной папке.

Вы можете найти некоторые реальные примеры в своей Qt-установке. Перейдите к, скажем, C:\Qt\5.3\mingw482_32\qml - все подпапки здесь содержат плагины QML, в основном написанные в C++. Вот пример исходного кода:

  • 0
    Спасибо за точный ответ. Это мне очень помогло. Еще один вопрос относительно пути импорта. Все пользовательские плагины имеют свой собственный каталог в папке, называемой плагинами. Как я могу импортировать их все сразу?
  • 0
    Смотрите документацию QQmlEngine: qt-project.org/doc/qt-5/qqmlengine.html Найдите такие функции, как importPlugin() и pluginPathList()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню