Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Creating Next/Previous Function using Vectors problem.
Forum Updated to NodeBB v4.3 + New Features

Creating Next/Previous Function using Vectors problem.

Scheduled Pinned Locked Moved Solved General and Desktop
3 Posts 2 Posters 176 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • I Offline
    I Offline
    IT Master
    wrote on last edited by
    #1

    I'm currently creating a program with images and strings being stored in vectors. Now what I wanted to do is for the program to display the first 4 data from the vectors to the program, and if the user pressed next, then it'll display the next 4, press previous, then it'll go back to the previous 4. Usual rules in displaying data applies.

    I already made most of the code, but it seems that I'm lost as to where I would put the code to perform such a function, for I have initally placed the entire function within the MainWindow, but when I execute the code, I would get the vector out of bound error, mainly because it's running under a while true condition since I want display the info then wait for input from the user if s/he wants to go next or not so that the display for the next batch of data would be done.

    How in the world am I going to implement such a thing in a way that doesn't require me to perform a while(true) condition that would make the entire thing out of bounds?

    Thanks in advance!

    Here is the code in the mainwindow:

    #include "opencv2\opencv.hpp"
    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <iostream>
    #include <string>
    #include <cstring>
    #include <opencv2/core/types_c.h>
    #include <QDebug>
    #include <QImage>
    #include <QPixmap>
    #include <QtGlobal>
    
    #include "opencv2/imgproc/imgproc.hpp"
    #include "opencv2/imgproc/types_c.h"
    
    using namespace std;
    
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
        , ui(new Ui::MainWindow)
    {
        ui->setupUi(this);
        //for initialization purposes
        // get label dimensions
        int w = ui->mul1->width();
        int h = ui->mul1->height();
        //initializing all label images
        QLabel* pt[]={ui->p1,ui->p2,ui->p3,ui->p4};
        QLabel* mim[]={ui->mul1,ui->mul2,ui->mul3,ui->mul4};
        QLabel* cim[]={ui->cen1,ui->cen2,ui->cen3,ui->cen4};
        QLabel* yr[]={ui->yel1,ui->yel2,ui->yel3,ui->yel4};
        QLabel* tim[]={ui->ther1,ui->ther2,ui->ther3,ui->ther4};
        QLabel* aim[]={ui->avg1,ui->avg2,ui->avg3,ui->avg4};
        QLabel* tri[]={ui->tem1,ui->tem2,ui->tem3,ui->tem4};
        QLabel* trt[]={ui->tres1,ui->tres2,ui->tres3,ui->tres4};
        vector<QLabel> muli(mim, mim+sizeof(mim) / sizeof(mim[0]) );
        QImage no_i = QImage("no-img.png");
        QImage gr = QImage("gray.jpg");
        no_i.scaled(w,h);
        gr.scaled(w,h);
        unsigned long fi;
        //unsigned long fil;
        unsigned long yi;
        unsigned long il=0;
        //for debug
        Databank datab = testpass();
        //end
        fi = static_cast<unsigned long>(datab.mi.size());
        //fi = 4;
        yi = static_cast<unsigned long>(datab.yela.size());
        qDebug()<<"Number of Multispectral images in this vector(MW): "<<fi<<endl;
        qDebug()<<"Number of Yellow strings in this vector(MW): "<<yi<<endl;
        if(fi==0){
            while(il<4){
                QString plt = QString("Plot #%1").arg(il+1);
                QString ncen = QString("No Dominant color found.");
                QString ntem = QString("No Average temp found.");
                pt[il]->setText(plt);
                mim[il]->setPixmap(QPixmap::fromImage(no_i));
                cim[il]->setPixmap(QPixmap::fromImage(gr));
                yr[il]->setText(ncen);
                tim[il]->setPixmap(QPixmap::fromImage(no_i));
                aim[il]->setPixmap(QPixmap::fromImage(gr));
                tri[il]->setText(ntem);
                trt[il]->setText("No result can be derived.");
                il++;
            }
            ui->prev->setEnabled(false);
            ui->next->setEnabled(false);
        }
        else if(fi<=4){
            unsigned long mmil=0.0000000;
            while(mmil<fi){
                QString plt = QString("Plot #%1").arg(mmil+1);
                pt[mmil]->setText(plt);
                mim[mmil]->setPixmap(QPixmap::fromImage(datab.mi[mmil]).scaled(125, 125));
                cim[mmil]->setPixmap(QPixmap::fromImage(datab.cenp[mmil]).scaled(200, 25));
                yr[mmil]->setText(QString::fromStdString(datab.yela[mmil]));
                tim[mmil]->setPixmap(QPixmap::fromImage(datab.ti[mmil]).scaled(125, 125));
                aim[mmil]->setPixmap(QPixmap::fromImage(datab.avtemp[mmil]).scaled(125, 125));
                tri[mmil]->setText(QString::fromStdString(datab.lo[mmil]));
                trt[mmil]->setText(QString::fromStdString(datab.tr[mmil]));
                mmil++;
            }
            unsigned long r=4-fi;
            il=0;
            while(il<r){
                QString plt = QString("Plot #%1").arg(mmil+1);
                QString ncen = QString("No Dominant color found.");
                QString ntem = QString("No Average temp found.");
                pt[mmil]->setText(plt);
                mim[mmil]->setPixmap(QPixmap::fromImage(no_i));
                cim[mmil]->setPixmap(QPixmap::fromImage(gr));
                yr[mmil]->setText(ncen);
                tim[mmil]->setPixmap(QPixmap::fromImage(no_i));
                aim[mmil]->setPixmap(QPixmap::fromImage(gr));
                tri[mmil]->setText(ntem);
                trt[mmil]->setText("No result can be derived.");
                il++;
                mmil++;
            }
            ui->prev->setEnabled(false);
            ui->next->setEnabled(false);
        }
        else if(fi>4){
            unsigned long d = fi/4;
            int rm = fi%4;
            if(rm!=0)
                d++;
            int ni = 0;
            unsigned long da=0;
            while(da<4){
                QString plt = QString("Plot #%1").arg(da+1);
                pt[da]->setText(plt);
                mim[da]->setPixmap(QPixmap::fromImage(datab.mi[da]).scaled(125, 125));
                cim[da]->setPixmap(QPixmap::fromImage(datab.cenp[da]).scaled(200, 25));
                yr[da]->setText(QString::fromStdString(datab.yela[da]));
                tim[da]->setPixmap(QPixmap::fromImage(datab.ti[da]).scaled(125, 125));
                aim[da]->setPixmap(QPixmap::fromImage(datab.avtemp[da]).scaled(125, 125));
                tri[da]->setText(QString::fromStdString(datab.lo[da]));
                trt[da]->setText(QString::fromStdString(datab.tr[da]));
                da++;
            }
            ui->prev->setEnabled(false);
            unsigned long dn = d;
            unsigned long adi=0;
            while(dn<=d){
                da=0;
                if(dn==d){
                    ui->prev->setEnabled(false);
                }else if(dn==dn-1){
                    ui->next->setEnabled(false);
                }
                if(ui->next->isDown()==true){
                   adi=adi+4;
                   dn--;
                }else if(ui->prev->isDown()==true){
                   adi=adi-4;
                   dn++;
                }
                while(da<4){
                    QString plt = QString("Plot #%1").arg(da+1+adi);
                    pt[da]->setText(plt);
                    mim[da]->setPixmap(QPixmap::fromImage(datab.mi[da+adi]).scaled(125, 125));
                    cim[da]->setPixmap(QPixmap::fromImage(datab.cenp[da+adi]).scaled(200, 25));
                    yr[da]->setText(QString::fromStdString(datab.yela[da+adi]));
                    tim[da]->setPixmap(QPixmap::fromImage(datab.ti[da+adi]).scaled(125, 125));
                    aim[da]->setPixmap(QPixmap::fromImage(datab.avtemp[da+adi]).scaled(125, 125));
                    tri[da]->setText(QString::fromStdString(datab.lo[da+adi]));
                    trt[da]->setText(QString::fromStdString(datab.tr[da+adi]));
                    da++;
                }
            }
        }
        //qDebug() << "App path : " << qApp->applicationDirPath();//for debug paths
        //for the restart of the GUI program
    }
    MainWindow::~MainWindow()
    {
        delete ui;
    }
    
    
    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi and welcome to devnet,

      The loop is your error.

      You should implement your navigation as a result of a couple of previous/next button click.

      In the slots associated with these clicks, update the current index the way you want it and then trigger the update of your labels.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      2
      • I Offline
        I Offline
        IT Master
        wrote on last edited by
        #3

        Thanks a bunch! Though I had some errors created from adjusting to what you have suggested, I finally got it working!

        1 Reply Last reply
        1

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved