한국어
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 85787
78 QSocketNotifier로 파일 디스크립터의 활동감지 makersweb 2019.08.28 1728
77 MCU용 Qt에 대해서 makersweb 2019.08.22 1911
76 [Qt News] Qt for Python을 위한 기술 비전 j2doll 2019.08.20 1624
75 열거형(enum)을 QML에서 사용하는 방법과 문자열(QString)로 얻기 makersweb 2019.08.20 3875
74 [Qt News] Qt 6 기술 비전 (Technical vision for Qt 6) [2] j2doll 2019.08.08 2111
73 [Qt News] Qt6 Git 개발 초기 단계 시작하기 j2doll 2019.08.02 2328
72 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 972
71 Qt기반의 오픈소스 프로젝트들 - 2 운영자 2019.07.21 4002
70 QML, 이미지, 폰트등을 바이너리 리소스로 만들기 makersweb 2019.06.24 3502
69 Qt Creator에서 임베디드 장치로 deploy설정(Custom Process Step) file makersweb 2019.06.15 2199
68 Qt Quick Controls 2사용 및 스타일 설정 file makersweb 2019.06.07 6239
67 QML 강좌 - 동적 Listing (ListView) file makersweb 2019.06.01 10081
66 QtInstallerFramework로 온라인 설치프로그램(Online Installer)만드는 방법 [4] file makersweb 2019.05.28 6254
65 QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] file makersweb 2019.05.26 14857
64 QML에서 멀티 스레드(multithreading) 프로그래밍 file makersweb 2019.05.25 2650
63 QtSerialPort를 사용한 시리얼(Serial)통신 [3] makersweb 2019.05.21 11877
62 Qt기반의 오픈소스 프로젝트들 makersweb 2019.05.15 5412
61 Q_D매크로와 d-pointer file makersweb 2019.05.07 759
60 가상키보드(Qt Virtual Keyboard)를 사용하는 방법 [32] file makersweb 2019.05.03 220913
59 Windows에서 Qt D-Bus를 사용하여 프로세스간 통신(IPC) file makersweb 2019.05.02 4469