한국어
Qt
 

QML 에서 기본적으로 이미지를 표시하려면 Image 아이템을 사용하면된다. 로컬 파일 시스템이나 웹에 있는 이미지도 훌륭하게 표시할 수 있다. 애플리케이션이 시작될 때 Qt 리소스에서 Qml을 로드하는 경우, Qml뿐만 아니라 모든 이미지는 Qt리소스에서 로드된다.

 

자주는 아니지만 RGB 데이터를 표시해야 하는 경우가 있다. 이런 이미지를 화면에 나타내야 할 필요가 있을 경우 QQuickImageProvider 를 서브클래싱하고 QImage 를 제공하여 QML에서 표시할 수 있다.

 

아래 예제는 QQuickImageProvider 를 이용한 이미지 표시 방법을 보여준다.

 

imageprovider.h

#ifndef IMAGEPROVIDER_H
#define IMAGEPROVIDER_H
 
#include <QQuickImageProvider>
 
class ImageProvider : public QObject, public QQuickImageProvider
{
   Q_OBJECT
  public:

 
   ImageProvider();
   ~ImageProvider();
   static ImageProvider * instance();
   QImage requestImage(const QString& id, QSize* size, const QSize& requestedSize);
   QPixmap requestPixmap(const QString& id, QSize* size, const QSize& requestedSize);
};

#endif // IMAGEPROVIDER_H

 

imageprovider.cpp

#include "imageProvider.h"
#include <QFile>
#include <QImage>
#include <QPixmap>
#include <QDebug>

ImageProvider *ImageProviderInstance;

ImageProvider::ImageProvider()
    :QQuickImageProvider(QQmlImageProviderBase::Image)
{
    
}

ImageProvider::~ImageProvider()
{
    
}

ImageProvider *ImageProvider::instance()
{
    if(ImageProviderInstance)
    {
        return ImageProviderInstance;
    }
    else
    {
        ImageProviderInstance = new ImageProvider;
        return ImageProviderInstance;
    }
}

QImage ImageProvider::requestImage(const QString& id, QSize* size, const QSize&    requestedSize)
{
    QImage image(id);
    QImage result;
    
    
    if (requestedSize.isValid()) {
        result = image.scaled(requestedSize, Qt::KeepAspectRatio);
    } else {
        result = image;
    }
    *size = result.size();
    return result;
}

QPixmap ImageProvider::requestPixmap(const QString& id, QSize* size, const QSize& requestedSize)
{
    QPixmap image(id);
    QPixmap result;
    
    
    if (requestedSize.isValid()) {
        result = image.scaled(requestedSize, Qt::KeepAspectRatio);
    } else {
        result = image;
    }
    *size = result.size();
    return result;
}

 

mainwindow.cpp 에 imageprovider객체 등록

 context->engine()->addImageProvider(QString("extern"), ImageProvider::instance());

 

Qml 애플리케이션

 Image {
    id: img
    x: 0
    y: 25
    width: 227
    height: 230
    anchors.horizontalCenter: parent.horizontalCenter
     source: "image://extern/"+path
    //doesn't find absolute path in windows source: "file://"+path
    fillMode: Image.PreserveAspectFit
}

 

참고: http://stackoverflow.com/questions/15865846/error-while-set-up-absolute-image-path-in-qml-qt-under-windows

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 85701
38 싱글터치 스크린 및 임베디드 리눅스 기반에서 Qt 터치입력 makersweb 2018.12.24 1393
37 ShaderEffect QML Type 을 이용한 그래픽효과 file makersweb 2018.12.09 2107
36 Qml에서 커튼효과 구현 예제 - Shader Effects file 운영자 2018.12.05 1105
35 안드로이드 Qt 프로그래밍 file makersweb 2018.11.30 8804
34 리눅스에서 Qt4.8기반 어플리케이션의 한글입력 file makersweb 2018.11.29 2427
33 QML에서 동적으로 텍스트 다국어 처리 file makersweb 2018.11.04 4191
32 Qt Installer Framework - 패키징, 설치프로그램 제작 file makersweb 2018.10.14 11636
31 Qt 응용프로그램 배포(windows) file makersweb 2018.10.10 11282
30 소스코드에서 환경변수 가져오기와 설정하기 makersweb 2018.10.08 1798
29 표를 만들고 PDF문서로 출력하기 file makersweb 2018.09.30 1601
28 Qml에서 키보드 입력 이벤트 핸들링 file makersweb 2018.08.09 3569
27 Qml 어플리케이션 정적 빌드 file makersweb 2018.07.27 2130
26 Qt Bluetooth 관련 기능 확인 사항 makersweb 2018.07.10 761
25 Qml 및 C++개발시 유용한 팁 [3] makersweb 2018.04.06 5881
24 Qt Version확인 방법 makersweb 2018.03.29 3506
23 초보자를 위한 첫번째 프로젝트 - QML로 만드는 Hello World file makersweb 2018.03.16 14425
22 Windows에서 라즈베리파이3 Qt 어플리케이션 개발 및 원격 실행 file makersweb 2018.02.23 6066
21 Windows에서 라즈베리파이3용 Qt5.10.0 크로스컴파일 [20] file makersweb 2018.02.23 12863
20 Windows환경에서 mingw로 Qt 5.10 정적(static)빌드 file makersweb 2018.02.01 5683
19 다국어 지원 어플리케이션 개발 file makersweb 2018.01.27 2959