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 }
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 | 운영자 | 2019.01.05 | 85343 |
16 | QPA 플러그인과 HTML5 Backend | makersweb | 2017.12.27 | 800 |
15 | 임의의 메모리 영역(QImage)에 QPainter를 이용하여 그리기 | makersweb | 2017.12.19 | 3403 |
14 | QML에서 undefined를 확인하는 방법 | makersweb | 2017.11.29 | 1459 |
13 | QPA 플러그인과 EGLFS | makersweb | 2017.11.21 | 3898 |
12 | 타임스탬프( timestamp) 유닉스 시간 | makersweb | 2017.10.19 | 1612 |
11 | Qt Logging Rule, Qt 프레임워크 로그 출력 | makersweb | 2017.01.13 | 3672 |
10 | QString 문자열에서 숫자만 추출해서 QString으로 반환 | makersweb | 2017.01.10 | 3057 |
9 | 멀티 스레드환경, 스레드에 안전한 이벤트처리 | makersweb | 2016.10.27 | 4930 |
8 | Ubuntu Linux에서 Qt Creator 설치 | makersweb | 2016.03.06 | 10647 |
7 | QtConcurrent를 이용하여 쓰레드를 만드는 방법과 MapReduce | makersweb | 2016.01.24 | 9408 |
6 | Qt 프로그래밍의 시작 | makersweb | 2015.10.25 | 14324 |
5 | Qt의 스레드간 시그널 슬롯의 커넥션타입 [1] | makersweb | 2015.10.24 | 10103 |
4 | Qt의 시그널 슬롯 시스템 | makersweb | 2015.10.20 | 23429 |
» | QQuickImageProvider 를 이용한 Qml 에서 이미지 표시 | makersweb | 2015.10.18 | 5974 |
2 | Qml 사용자 ScrollBar 구현 | makersweb | 2015.07.24 | 6210 |
1 | z-order 를 컨트롤 하기위한 방법 | makersweb | 2015.05.13 | 6573 |