QQuickImageProvider Class
QQuickImageProvider 클래스는 QML에서 픽스맵과 스레드 기반 이미지 요청을 지원하기 위한 인터페이스를 제공합니다. 더 보기...
| 헤더: | #include <QQuickImageProvider> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
| qmake: | QT += quick |
| 상속: | QQmlImageProviderBase |
| 상속받는 클래스: |
공개 함수
| QQuickImageProvider(QQmlImageProviderBase::ImageType type, QQmlImageProviderBase::Flags flags = Flags()) | |
| virtual | ~QQuickImageProvider() override |
| virtual QImage | requestImage(const QString &id, QSize *size, const QSize &requestedSize) |
| virtual QPixmap | requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) |
| virtual QQuickTextureFactory * | requestTexture(const QString &id, QSize *size, const QSize &requestedSize) |
재구현된 공용 함수
| virtual QQmlImageProviderBase::Flags | flags() const override |
| virtual QQmlImageProviderBase::ImageType | imageType() const override |
상세 설명
QQuickImageProvider는 QML 애플리케이션에서 고급 이미지 로딩 기능을 제공하기 위해 사용됩니다. 이를 통해 QML 내의 이미지를 다음과 같이 처리할 수 있습니다:
- 실제 이미지 파일 대신 QPixmaps를 사용하여 로드
- 별도의 스레드에서 비동기적으로 로드
이미지를 이미지 제공자를 통해 불러오도록 지정하려면, 이미지의 URL 소스에 "image:" 스키마를 사용하고, 그 뒤에 이미지 제공자의 식별자와 요청된 이미지의 이름을 지정합니다. 예를 들어:
Image { source: "image://myimageprovider/image.png" }이는 "myimageprovider"라는 이름의 이미지 제공자를 통해 이미지를 불러와야 하며, 불러올 이미지의 이름이 "image.png"임을 지정합니다. QML 엔진은 QQmlEngine::addImageProvider()를 통해 등록된 제공자 목록에 따라 적절한 이미지 제공자를 호출합니다.
식별자는 대소문자를 구분하지 않지만, URL의 나머지 부분은 대소문자를 그대로 유지한 채 전달된다는 점에 유의하십시오. 예를 들어, 아래 코드 조각은 여전히 "myimageprovider"라는 이름의 이미지 제공자가 이미지를 로드하도록 지정하지만, 위의 코드 조각과는 다른 이미지("image.png" 대신 "Image.png")를 요청하게 됩니다.
Image { source: "image://MyImageProvider/Image.png" }URL의 나머지 부분에 대소문자 구분을 적용하지 않으려면, 이미지 제공자 내부에서 직접 처리해야 합니다.
예시
다음은 두 개의 이미지입니다. 이 이미지들의 ` source ` 값은 "colors"라는 이름의 이미지 제공자에 의해 로드되어야 함을 나타내며, 로드될 이미지는 각각 "yellow"와 "red"입니다:
QML에서 이 이미지들을 로드할 때, QML은 일치하는 이미지 제공자를 찾아 해당 제공자의 requestImage() 또는 requestPixmap() 메서드( imageType()에 따라 다름)를 호출하여 이미지를 로드합니다. 이 메서드는 첫 번째 이미지의 경우 id 매개변수가 "yellow"로, 두 번째 이미지의 경우 "red"로 설정된 상태로 호출됩니다.
다음은 위의 QML에서 요청한 이미지를 불러올 수 있는 이미지 프로바이더 구현 예시입니다. 이 구현은 요청된 색상으로 채워진 QPixmap 이미지를 동적으로 생성합니다:
class ColorImageProvider : public QQuickImageProvider
{
public:
ColorImageProvider()
: QQuickImageProvider(QQuickImageProvider::Pixmap)
{
}
QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override
{
int width = 100;
int height = 50;
if (size)
*size = QSize(width, height);
QPixmap pixmap(requestedSize.width() > 0 ? requestedSize.width() : width,
requestedSize.height() > 0 ? requestedSize.height() : height);
pixmap.fill(QColor(id).rgba());
return pixmap;
}
};이 프로바이더를 QML에서 사용할 수 있도록 하기 위해, "colors" 식별자로 QML 엔진에 등록합니다:
int main(int argc, char *argv[])
{
QQuickView view;
QQmlEngine *engine = view.engine();
engine->addImageProvider(QLatin1String("colors"), new ColorImageProvider);
view.setSource(QUrl::fromLocalFile(QStringLiteral("imageprovider-example.qml")));
view.show();
return app.exec();
}이제 QML에서 이미지를 성공적으로 불러올 수 있습니다:

전체 구현 내용은 이미지 제공자 예제를 참조하십시오. 이 예제에서는 위에서 보여준 것처럼 애플리케이션의 ` main() ` 함수에 제공자를 등록하는 대신, ` plugin `을 통해 제공자를 등록한다는 점에 유의하십시오.
"@nx" high DPI syntax 를 제공할 수도 있습니다.
비동기 이미지 로딩
QImage 또는 Texture 로딩을 지원하는 이미지 제공자는 자동으로 이미지의 비동기 로딩을 지원합니다. 이미지 소스에 대해 비동기 로딩을 활성화하려면, 관련 Image 또는 BorderImage 객체에 대해 asynchronous 속성을 true 로 설정하십시오. 이 기능이 활성화되면, 공급자에 대한 이미지 요청이 낮은 우선순위의 스레드에서 실행되어 이미지 로딩이 백그라운드에서 수행되고, 사용자 인터페이스에 미치는 성능 영향이 줄어듭니다.
asynchronous 속성이 true 로 설정되지 않은 이미지 소스의 경우에도 비동기 이미지 로딩을 강제 적용하려면, 이미지 제공자 생성자에 QQmlImageProviderBase::ForceAsynchronousImageLoading 플래그를 전달하면 됩니다. 이렇게 하면 해당 제공자에 대한 모든 이미지 요청이 별도의 스레드에서 처리됩니다.
QPixmap 를 제공하는 이미지 제공자의 비동기 로딩은 ThreadedPixmaps 기능이 있는 플랫폼에서만 지원됩니다. 픽스맵을 메인 스레드에서만 생성할 수 있는 플랫폼(즉, ThreadedPixmaps가 지원되지 않는 플랫폼)에서 asynchronous 가 true 로 설정되어 있더라도 해당 값은 무시되며 이미지는 동기식으로 로드됩니다.
ImageResponse 유형이 아닌 다른 유형의 제공자에 대한 비동기 이미지 로딩은 엔진당 단일 스레드에서 실행됩니다. 즉, 처리 속도가 느린 이미지 제공자는 다른 모든 요청의 로딩을 차단하게 됩니다. 이를 방지하려면 QQuickAsyncImageProvider 를 사용하고, QThreadPool 또는 이와 유사한 방법을 통해 제공자 측에서 스레딩을 구현할 것을 권장합니다. 완전한 구현 예시는 ‘이미지 응답 제공자 예제’를 참조하십시오.
이미지 캐싱
QQuickImageProvider가 반환하는 이미지는 QML 엔진에서 로드하는 다른 이미지와 마찬가지로 자동으로 캐시됩니다. "image://" 접두사가 붙은 이미지가 캐시에서 로드될 경우, 해당 이미지 제공자에 대해서는 ` requestImage()` 및 ` requestPixmap()`가 호출되지 않습니다. 이미지를 항상 이미지 제공자로부터 가져와야 하고 캐시에 저장하지 않으려면, 해당 Image 또는 BorderImage 객체의 cache 속성을 false 로 설정하십시오.
QQmlEngine::addImageProvider()도 참조하십시오 .
멤버 함수 설명서
QQuickImageProvider::QQuickImageProvider(QQmlImageProviderBase::ImageType type, QQmlImageProviderBase::Flags flags = Flags())
지정된 type 의 이미지를 제공하고, 지정된 flags 에 따라 동작하는 이미지 제공자를 생성합니다.
[override virtual noexcept] QQuickImageProvider::~QQuickImageProvider()
참고: 파생 클래스의소멸자는 스레드 안전해야 합니다.
[override virtual] QQmlImageProviderBase::Flags QQuickImageProvider::flags() const
QQmlImageProviderBase::flags() const를 재구현합니다.
이 제공자에 대해 설정된 플래그를 반환합니다.
[override virtual] QQmlImageProviderBase::ImageType QQuickImageProvider::imageType() const
QQmlImageProviderBase::imageType() const를 재구현합니다.
이 제공자가 지원하는 이미지 유형을 반환합니다.
[virtual] QImage QQuickImageProvider::requestImage(const QString &id, QSize *size, const QSize &requestedSize)
id 를 사용하여 이미지를 반환하도록 이 메서드를 구현하십시오. 기본 구현은 빈 이미지를 반환합니다.
id 는 요청된 이미지 소스에서 "image:" 스키마와 제공자 식별자가 제거된 것입니다. 예를 들어, source 이미지의 주소가 "image://myprovider/icons/home"인 경우, 주어진 id 는 "icons/home"이 됩니다.
requestedSize 는 Image 항목이 요청한 Image::sourceSize 에 해당합니다. requestedSize 가 유효한 크기라면, 반환되는 이미지는 해당 크기가 되어야 합니다.
모든 경우에 size 는 이미지의 원본 크기로 설정되어야 합니다. 이는 해당 Image 의 width 및 height 값이 명시적으로 설정되지 않은 경우, 이 값들을 설정하는 데 사용됩니다.
참고: 이 메서드는 여러 스레드에서 호출될 수 있으므로, 이 메서드의 구현이 재진입 가능하도록 해야 합니다.
[virtual] QPixmap QQuickImageProvider::requestPixmap(const QString &id, QSize *size, const QSize &requestedSize)
id 를 사용하여 픽스맵을 반환하도록 이 메서드를 구현하십시오. 기본 구현은 빈 픽스맵을 반환합니다.
id 는 요청된 이미지 소스에서 "image:" 스키마와 제공자 식별자가 제거된 값입니다. 예를 들어, source 이미지의 주소가 "image://myprovider/icons/home"인 경우, 주어진 id 는 "icons/home"이 됩니다.
requestedSize 는 Image 항목이 요청한 Image::sourceSize 에 해당합니다. requestedSize 가 유효한 크기라면, 반환되는 이미지는 해당 크기가 되어야 합니다.
모든 경우에 size 는 이미지의 원본 크기로 설정되어야 합니다. 이는 해당 Image 의 width 및 height 값이 명시적으로 설정되지 않은 경우, 이 값들을 설정하는 데 사용됩니다.
참고: 이 메서드는 여러 스레드에서 호출될 수 있으므로, 이 메서드의 구현이 재진입 가능하도록 해야 합니다.
[virtual] QQuickTextureFactory *QQuickImageProvider::requestTexture(const QString &id, QSize *size, const QSize &requestedSize)
id 를 사용하여 텍스처를 반환하도록 이 메서드를 구현하십시오. 기본 구현은 nullptr 를 반환합니다.
id 는 요청된 이미지 소스에서 "image:" 스키마와 제공자 식별자가 제거된 것입니다. 예를 들어, source 이미지의 주소가 "image://myprovider/icons/home"인 경우, 주어진 id 는 "icons/home"이 됩니다.
requestedSize 는 Image 항목이 요청한 Image::sourceSize 에 해당합니다. requestedSize 가 유효한 크기라면, 반환되는 이미지는 해당 크기가 되어야 합니다.
모든 경우에 size 는 이미지의 원본 크기로 설정되어야 합니다. 이는 해당 Image 의 width 및 height 값이 명시적으로 설정되지 않은 경우, 이 값들을 설정하는 데 사용됩니다.
참고: 이 메서드는 여러 스레드에서 호출될 수 있으므로, 이 메서드의 구현이 재진입 가능해야 합니다.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.