Расширение плагина Qt - PullRequest
0 голосов
/ 28 мая 2020

У меня вопрос о надстройках C ++ в Qt5 с QML UI.

Допустим, у нас есть приложение A и приложение B. Оба используют подключаемый модуль C, написанный на c ++, для отрисовки некоторых QQuickItems в qml.

Оба приложения работают нормально. Теперь мне нужно расширить плагин несколькими дополнительными опциями (рисовать нечего, но на основе данных, уже доступных в плагине C), которые - и в этом проблема - должны быть доступны только в приложении B.

Зачем? Дополнительные параметры, требующие некоторых, включают из других библиотек, которые не должны добавляться в приложение A. Таким образом, приложение A должно работать с плагином basi c, а приложение должно работать с расширенным плагином.

Мой вопрос в том, что лучший / распространенный способ добиться этого?

Я просто подумал немного и получил несколько (на мой взгляд, не очень) решений / идей:

  1. Написание плагина D, который может делать расширенные параметры. Таким образом, приложение A может работать с подключаемым модулем C, а приложение запускается с подключаемыми модулями C и D. Недостатком является то, что 2 подключаемых модуля должны интенсивно взаимодействовать (подключаемому модулю D требуются данные C) через qml. Я думаю, что это не очень хорошо, может быть лучший способ передачи данных между двумя плагинами?

  2. Написание 2 плагинов, где плагин C является основным c одним и плагин D имеет содержимое плагина C плюс расширенные параметры. Конечно, это должно сработать, но мне придется дважды корректировать код. Это определенно неприятно.

  3. Я подумал о некоторых условных включениях, чтобы просто включить расширенные параметры, если установлены соответствующие флаги. У меня нет опыта в этом. Но возможно ли это?

1 Ответ

0 голосов
/ 30 мая 2020

Я думаю, что лучший способ продолжить - это ваш третий вариант. Вы можете добавить функцию инициализации в свой плагин.

class PluginC : public plugininterface {

    Q_OBJECT

    Q_PLUGIN_METADATA(IID "plugininterface")
    Q_INTERFACES(plugininterface)

public:
    /* Init the plugin */
    void init( bool extended );

    ...
    ...
    ...

private:
    bool m_extended;
};

Остальная часть плагина может быть создана как обычно, со всеми необходимыми функциями. В вашем приложении A вы можете запустить свой плагин с расширенным = false, а в приложении B вы можете запустить свой плагин с расширенным = true

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...