QQuickImageProvider Class

QQuickImageProvider 클래스는 QML에서 픽스맵과 스레드 이미지 요청을 지원하기 위한 인터페이스를 제공합니다. 더 보기...

Header: #include <QQuickImageProvider>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
상속합니다: QQmlImageProviderBase
상속 대상:

QQuickAsyncImageProvider

공용 함수

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"입니다:

Column {
    Image { source: "image://colors/yellow" }
    Image { source: "image://colors/red" }
}

이러한 이미지가 QML에 의해 로드되면 일치하는 이미지 공급자를 찾아 requestImage() 또는 requestPixmap() 메서드( imageType()에 따라)를 호출하여 이미지를 로드합니다. 이 메서드는 id 매개 변수를 첫 번째 이미지의 경우 "노란색"으로, 두 번째 이미지의 경우 "빨간색"으로 설정하여 호출됩니다.

다음은 위의 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 또는 텍스처 로딩을 지원하는 이미지 공급자는 이미지의 비동기 로딩을 자동으로 지원합니다. 이미지 소스에 비동기 로딩을 사용하려면 관련 Image 또는 BorderImage 객체에 대해 asynchronous 속성을 true 로 설정합니다. 이 기능을 활성화하면 공급자에 대한 이미지 요청이 우선순위가 낮은 스레드에서 실행되므로 이미지 로딩이 백그라운드에서 실행되어 사용자 인터페이스에 미치는 성능 영향을 줄일 수 있습니다.

asynchronous 속성이 true 으로 설정되지 않은 이미지 소스의 경우에도 비동기 이미지 로드를 강제하려면 이미지 공급자 생성자에 QQmlImageProviderBase::ForceAsynchronousImageLoading 플래그를 전달할 수 있습니다. 이렇게 하면 공급자에 대한 모든 이미지 요청이 별도의 스레드에서 처리됩니다.

QPixmap 을 제공하는 이미지 공급자에 대한 비동기 로딩은 ThreadedPixmaps 기능이 있는 플랫폼에서만 지원되며, 메인 스레드에서만 픽셀맵을 만들 수 있는 플랫폼(즉, ThreadedPixmaps가 지원되지 않음)에서 asynchronoustrue 으로 설정되어 있으면 값이 무시되고 이미지가 동기식으로 로드됩니다.

이미지 응답 이외의 유형의 공급자에 대한 비동기 이미지 로딩은 엔진별로 단일 스레드에서 실행됩니다. 즉, 느린 이미지 공급자는 다른 요청의 로딩을 차단합니다. 이를 방지하려면 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()

를 소멸시킵니다. 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::sourceSize 에 해당합니다. requestedSize 이 유효한 크기인 경우 반환되는 이미지는 해당 크기여야 합니다.

모든 경우에 size 은 이미지의 원래 크기로 설정해야 합니다. 이 값은 관련 Imagewidthheight 을 명시적으로 설정하지 않은 경우 설정하는 데 사용됩니다.

참고: 이 메서드는 여러 스레드에서 호출될 수 있으므로 이 메서드의 구현이 다시 입력되는지 확인하세요.

[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::sourceSize 에 해당합니다. requestedSize 이 유효한 크기인 경우 반환되는 이미지는 해당 크기여야 합니다.

모든 경우에 size 은 이미지의 원래 크기로 설정해야 합니다. 이 값은 관련 Imagewidthheight 을 명시적으로 설정하지 않은 경우 설정하는 데 사용됩니다.

참고: 이 메서드는 여러 스레드에서 호출될 수 있으므로 이 메서드의 구현이 다시 입력되는지 확인하세요.

[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::sourceSize 에 해당합니다. requestedSize 이 유효한 크기인 경우 반환되는 이미지는 해당 크기여야 합니다.

모든 경우에 size 은 이미지의 원래 크기로 설정해야 합니다. 이 값은 관련 Imagewidthheight 을 명시적으로 설정하지 않은 경우 설정하는 데 사용됩니다.

참고: 이 메서드는 여러 스레드에서 호출될 수 있으므로 이 메서드의 구현이 다시 입력되는지 확인하세요.

© 2025 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.