Как загрузить и отобразить несколько изображений последовательно при перемещении ползунка? - PullRequest
0 голосов
/ 09 апреля 2019

Я создаю функцию в моей программе просмотра изображений в Qt, используя c ++, где несколько изображений могут загружаться и отображаться последовательно при перемещении ползунка. Любые идеи или ссылки на код я могу ссылаться? Спасибо.

    void MainWindow::on_btn_image_clicked()
    {
        qDebug()<<"clicked.....";
        QStringList filename = QFileDialog::getOpenFileNames(this, tr("Browse Image"), "", tr("Images(*.png *.jpg *.bmp *.gif)"));

        if (!filename.isEmpty())
        {
            for(int i=0; i<filename.length(); i++)
            {
                QString str = filename.at(i) ;
                qDebug()<<"str========>>>>>"<<str;

                QImage image1(str);

                QByteArray bytes;
                QBuffer buffer(&bytes);
                buffer.open(QIODevice::WriteOnly);
                image1.save(&buffer,"");
                buffer.close();

                unsigned char *data_image = (unsigned char *)malloc(bytes.size());
                memcpy(data_image, reinterpret_cast<unsigned char *>(bytes.data()), (unsigned int)bytes.size());



                auto sigMap = new QSignalMapper(this);

                horizontalSlider[i] = new QSlider(this);
                connect(horizontalSlider[i], SIGNAL(valueChanged(int)), sigMap, SLOT(map()));

                sigMap->setMapping(horizontalSlider[i], i);

                connect(sigMap, SIGNAL(mapped(int)), this, SLOT(slider_x(int)));


                int h=image1.height();
                int w=image1.width();

                QImage image2(str);
                image2= QImage(data_image, h, w, QImage::Format_Indexed8);

                if (image2.height()>=image2.width())
                {
                     image = image2.scaledToHeight(ui->graphicsView->height(), Qt::SmoothTransformation);
                }

                else
                {
                     image = image2.scaledToWidth(ui->graphicsView->width(), Qt::SmoothTransformation);
                }

                item = new QGraphicsPixmapItem(QPixmap::fromImage(image));

                scene[i] = new QGraphicsScene(this);
                ui->graphicsView->setScene(scene[i]);
                scene[i]->addItem(item);

            }
        }

     }

    void MainWindow::slider_x(int i)
    {
        int value = horizontalSlider[i]->value();
    }

Я пытаюсь преобразовать изображения в байтовые массивы и автоматически подключить массивы к слайдеру. Есть ли проблема с концепцией или кодами?

1 Ответ

0 голосов
/ 09 апреля 2019

Мой подход заключается в том, чтобы загрузить все изображения в макете внутри фликбэла и соединить его с ползунком.Вы можете выбрать макет таким образом, чтобы следующие изображения загружались вне экрана, поэтому у вас будет полоса изображений, которую вы можете перемещать по окну / экрану.Однако это может стать очень дорогостоящим, когда количество изображений становится больше.Если вы обрабатываете много изображений, вы должны загружать их по требованию и выгружать их, когда они находятся за кадром.Но с этим методом я не уверен, как обращаться с предметами / объектами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...