Резюме
Qt предлагает интерфейсы для расширения приложений с использованием плагинов. Эти интерфейсы, как правило, определяются в заголовках приложения и включаются в плагины. Если у меня есть разные репозитории git для приложения и плагинов, как я могу масштабировать интерфейсы в плагинах?
Пример
Давайте используем пример Plug & Paint из документации Qt. Это основное приложение и определяет интерфейсы для BrushInterface
, ShapeInterface
и FilterInterface
в interfaces.h.
// plugandpaint/interfaces.h
// (...)
class BrushInterface
{
// (...)
};
class ShapeInterface
{
// (...)
};
class FilterInterface
{
// (...)
};
// (...)
Пример Основные инструменты Plug & Paint определяет плагин, соответствующий этим интерфейсам. Для этого он должен включить interfaces.h из приложения в определение класса своего плагина.
// basictools/basictoolsplugin.h
// (...)
#include <plugandpaint/interfaces.h>
class BasicToolsPlugin : public QObject,
public BrushInterface,
public ShapeInterface,
public FilterInterface
// (...)
В примере предполагается, что плагин находится в 2 подпапках под основным приложением, и добавляет следующую строку в файл .pro плагина для включения его заголовков.
INCLUDEPATH += ../..
Вопрос * * 1023
Это хорошая практика? Должен ли я следовать этому соглашению и всегда клонировать плагины вложенных папок git repos 2 под приложением "hardcoding" INCLUDEPATH
как ../..
?
Одной из альтернатив будет иметь копию файла interfaces.h в плагинах, но тогда изменения в «оригинальном» файле могут сломать плагины. Есть ли способ иметь разные, но совместимые файлы interfaces.h между приложением и плагином? Например, если файл interfaces.h, находящийся в репозитории приложения, добавляет / удаляет интерфейсы, не используемые плагином, это повлияет на его использование?