2017-12-24 8 views
0

QImage을 표시 할 Image qml 구성 요소가 있습니다. 다음은 QML 코드입니다.QML :: Image보기에서 여러 QImages를 업데이트하면 마지막으로 보낸 이미지 만 표시됩니다.

코드 :

Item { 

    Image { 
     id: my_qimage_viewer 
     anchors.fill: parent 
    } 

    Connections { 
     target: qimage_selector_cpp_backend 
     onQImageDisplayRequested: { 
      my_qimage_viewer.source = next_qimage_source 
      console.log("New qimage sent for display is : " + my_qimage_viewer.source) 
     } 
    } 

} 

노력하고 있습니다 무엇 :
나는 다른 ID로 QImage의 모든 시간을 제공 할 QQuickImageProvider를 사용하여 C++ 클래스가 있습니다.

이 기술 는 기본적으로가 사용자가 일부 버튼을 선택하면 QImage을 업데이트 할 경우 작동합니다. 나는 QImage을 즉석에서 생성 할 수 있습니다. & my_qimage_viewer에 업데이트하십시오. 또한 사용자의 요청에 따라 여러 이미지를 표시 할 수 있습니다. 이것은 QQuickImageProvider을 사용하는 나의 기술이 기본적으로 작동하고 있음을 증명합니다. 문제가 발생하는 경우
그러나 작동하지 않습니다 무엇

는 여기에있다. 많은QImage s를 for 루프에 모두 50-60 같이 보내면 모두 표시되지 않지만 은 업데이트에 대해 마지막으로 보낸 메시지 만 표시합니다! 여기

내 목표는 에 사이에 몇 밀리 초 간격으로 50 ~ 60 개 QImage의 플레이하려고 그들을 비디오/애니메이션처럼 보이게하는 것입니다. 그런 종류의 사용을 위해 Image 구성 요소가 만들어지지 않았습니까? 아니면 제가 실수를하고있는 것입니까?

질문 :
QImage 다음를 업데이트하기 전에 디스플레이 완료 될 때까지 기다릴해야 할 수 있습니까? 그게 빠진 것이 있다면 어떻게해야합니까?

을 비디오 또는 애니메이션처럼 보이게 표시하는 Image을 사용하는 앱의 예가 있습니까?

+0

ANSW에서 찾을 수 있습니다 당신은 이미지를 업데이트 할 시점에 따라 달라지며, 이미지를로드하는 데 지연 만 있거나 이미지의 구성 및/또는 처리를 수행하고 있습니다. – eyllanesc

+0

@eyllanesc I 모든 이미지를 연속적으로 업데이트하려고합니다. 예. 심상의 건설에있는 지연이있을 것이다.그러나 처리 된'QImage's로 시도하기 전에, 나는 처음에 평범한 단순한'QImage'를 즉석에서 시험해보기로 결정했습니다. 이것은 프레임 워크가 실제로 작동 함을 증명하는 것입니다. [QML :: Image] (https://doc-snapshots.qt.io/qt5-dev/qml-qtquick-image.html)에 여러 개의 QImage를 업데이트하는 표준 예가 있습니까? –

답변

1

for-loop을 사용하면 이미지를 표시하고 업데이트 할 시간이 없으므로 각 이미지 사이에 약간의 시간을 주어야합니다.

Window { 
    visible: true 
    width: 640 
    height: 480 

    Image { 
     property int number 
     id: name 
     source: "image://numbers/"+number 

     NumberAnimation on number { 
      from:0 
      to: 60 
      duration: 1000 
     } 
    } 
} 

imageprovider.h : 이미지의 획득 시간이 1/60 초보다 작은, 예를 들어 우리는 적절한 단계에서 NumberAnimation 설정을 사용할 수있는 특정 값 미만이라고 가정

#ifndef IMAGEPROVIDER_H 
#define IMAGEPROVIDER_H 

#include <QQuickImageProvider> 
#include <QPainter> 
#include <QTime> 

class ImageProvider : public QQuickImageProvider 
{ 
public: 
    ImageProvider():QQuickImageProvider(QQuickImageProvider::Image){ 
     qsrand(QTime::currentTime().msec()); 
    } 
    QImage requestImage(const QString &id, QSize *size, const QSize &requestedSize){ 
     int width = 100; 
     int height = 50; 
     if (size) 
      *size = QSize(width, height); 
     QImage img(requestedSize.width() > 0 ? requestedSize.width() : width, 
       requestedSize.height() > 0 ? requestedSize.height() : height, QImage::Format_RGB32); 
     img.fill(QColor(qrand() % 256, qrand() % 256, qrand() % 256)); 
     QPainter painter(&img); 
     painter.setRenderHint(QPainter::Antialiasing, true); 
     painter.drawText(QRectF(QPointF(0, 0), img.size()), Qt::AlignCenter, 
         QTime::currentTime().toString("hh:mm:ss.z")+" "+id); 
     painter.end(); 
     return img; 
    } 
}; 

#endif // IMAGEPROVIDER_H 

완전한 예는 다음 link

+0

감사합니다. 이것은 여러 QImages의 경우'QtQuickImageProvider'를 사용하는이 방법을 이해하는 데 정말로 도움이되었습니다. –

관련 문제