2019년 3월 2일 토요일

- Defining Plugins | Qt Core 5.12


<QtPlugin> - Defining Plugins

<QtPlugin> 헤더 파일은 플러그인들을 정의하기 위한 매크로들을 정의합니다. More...
Macros

Q_DECLARE_INTERFACE(ClassName, Identifier)
Q_IMPORT_PLUGIN(PluginName)
Q_PLUGIN_METADATA( ...)

Macro Documentation

Q_DECLARE_INTERFACE(ClassName, Identifier)

이 매크로는 주어진 Identifier (문자열 리터럴)를 ClassName이라는 인터페이스 클래스에 연결합니다. 식별자는 고유해야합니다. 예를 들어:
#define BrushInterface_iid "org.qt-project.Qt.Examples.PlugAndPaint.BrushInterface/1.0"

Q_DECLARE_INTERFACE(BrushInterface, BrushInterface_iid)
이 매크로는 일반적으로 헤더 파일의 ClassName에 대한 클래스 정의 바로 다음에 사용됩니다. 자세한 내용은 Plug & Paint 예제를 참조하십시오.
Q_DECLARE_INTERFACE를 네임 스페이스에 선언 된 인터페이스 클래스와 함께 사용하려면 Q_DECLARE_INTERFACE가 네임 스페이스 안에 있지 않은지 확인해야합니다. 예를 들어:
namespace Foo
{
struct MyInterface { ... };
}

Q_DECLARE_INTERFACE(Foo::MyInterface, "org.examples.MyInterface")

Q_IMPORT_PLUGIN(PluginName)

이 매크로는 PluginName이라는 플러그인을 가져옵니다.이 플러그인은 Q_PLUGIN_METADATA()를 사용하여 플러그인의 메타 데이터를 선언하는 클래스의 이름과 일치합니다.
이 매크로를 응용 프로그램의 소스 코드에 삽입하면 정적 플러그인을 사용할 수 있습니다.
Example:
Q_IMPORT_PLUGIN(qjpeg)
응용 프로그램이 빌드 될 때 정적 플러그인도 링커에 포함되어야합니다. Qt의 미리 정의 된 플러그인의 경우 QTPLUGIN을 사용하여 필요한 플러그인을 빌드에 추가 할 수 있습니다. 예를 들어:
TEMPLATE = app
QTPLUGIN += qjpeg qgif # image formats

Q_PLUGIN_METADATA( ...)

이 매크로는이 개체를 인스턴스화하는 플러그인의 일부인 메타 데이터를 선언하는 데 사용됩니다.
매크로는 객체를 통해 구현 된 인터페이스의 IID를 선언하고 플러그인의 메타 데이터가 들어있는 파일을 참조해야합니다.
Qt 플러그인의 소스 코드에는이 매크로가 정확히 하나 있어야합니다.
Example:
class MyInstance : public QObject
{
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QDummyPlugin" FILE "mymetadata.json")
};
자세한 내용은 Plug & Paint 예제를 참조하십시오.
이 매크로가 나타나는 클래스는 기본 구성 가능해야합니다.
FILE은 선택적이며 json 파일을 가리 킵니다.
json 파일은 빌드 시스템이 지정한 include 디렉토리 중 하나에 있어야합니다. moc는 지정된 파일을 찾을 수 없을 때 오류와 함께 종료합니다.
이 함수는 Qt 5.0에서 처음 소개되었습니다.