Нарисуйте одно за другим изображение на экране из QList <QImage>в методе paintevent () в Qt4.8 - PullRequest
0 голосов
/ 10 июля 2019

Я создаю чтение QImage из общей памяти и добавляю его в QList, а в painttevent я хочу нарисовать все изображения, которые у меня есть в QList, но в результате происходит сбой, как показано в фрагменте кода ниже.

Я создал определенный пользователем paintImage () для чтения по одному из QList и QPainter и попробовал рисовать, хотя сбоев нет, но в итоге на экране нет изображений.

    int fd = open("/run/user/1000/xpra.NanPLD.mmap", O_RDONLY);
    int filesize = 256*1024*1024;
    void* addr = mmap(NULL, filesize, PROT_READ, MAP_PRIVATE, fd, 0);
    createImage(addr,width, height, offset, colorFormat);
    void Client::createImage(void* chunk,int width, int height, int offset, 
    QString colorFormat)
    {
            qDebug() << "offset Value " << offset;
            image = QImage(((const unsigned char*)chunk ) + offset, width, height, QImage::Format_RGB888);
            xpraImages.append(image);
    }

    void Client::paintEvent(QPaintEvent *event)
    {
        qDebug() <<"Inside paint event" ;

        QPainter painter(this);
        static int counter = 0;
        qDebug() << "counter: " << counter; 
        qDebug() << "Image list length : " << xpraImages.count();       
        if(counter < xpraImages.count()){
            qDebug() << "counter " << counter;
            image = xpraImages.at(counter); // image is class member
            qWarning() << image.isNull() << image.width()<< image.height();
            if(!image.isNull()){
                qDebug() << "Inside paintvent after nullcheck";
                painter.drawImage(0,0,image); // here crashes
                            }
            counter++;
            QTimer::singleShot(50, this, SLOT(update()));

        }

    }
...