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. How to transffer QImage or QPixmap from one window to another using signals and slots
Forum Updated to NodeBB v4.3 + New Features

How to transffer QImage or QPixmap from one window to another using signals and slots

Scheduled Pinned Locked Moved Solved General and Desktop
29 Posts 5 Posters 3.1k 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.
  • S swansorter

    @JonB
    QImage img(1024, 150, QImage::Format_RGB888);

           int pixel=0;
           for (int y =  150-1; y>= 0; y--)
           {
              for (int x = 0; x < 1024; x++)
              {
                   img.setPixel(x,y,qRgb(((data[pixel+2]) ),(data[pixel+1]), (data[pixel+0])));
                   pixel+=3;
              }
    
           } 
          emit sendImage(img);
    
    JonBJ Offline
    JonBJ Offline
    JonB
    wrote on last edited by
    #11

    @swansorter
    Either you do not hit that code or you have not connected the correct signal instance to the correct slot instance, if you say the slot is not hit. Put a qDebug() << "Slot" as first statement in onGetImage() and see whether it gets printed or not.

    S 1 Reply Last reply
    0
    • JonBJ JonB

      @swansorter
      Either you do not hit that code or you have not connected the correct signal instance to the correct slot instance, if you say the slot is not hit. Put a qDebug() << "Slot" as first statement in onGetImage() and see whether it gets printed or not.

      S Offline
      S Offline
      swansorter
      wrote on last edited by
      #12

      @JonB it is not printing i tried

      JonBJ 1 Reply Last reply
      0
      • S swansorter

        @JonB it is not printing i tried

        JonBJ Offline
        JonBJ Offline
        JonB
        wrote on last edited by JonB
        #13

        @swansorter
        Then as I said

        Either you do not hit that [emit] code or you have not connected the correct signal instance to the correct slot instance

        S 1 Reply Last reply
        0
        • JonBJ JonB

          @swansorter
          Then as I said

          Either you do not hit that [emit] code or you have not connected the correct signal instance to the correct slot instance

          S Offline
          S Offline
          swansorter
          wrote on last edited by swansorter
          #14

          @JonB i tried qDebug() << "EMIT" near the emit signal. and it is executing

          JonBJ 1 Reply Last reply
          0
          • S swansorter

            @JonB i tried qDebug() << "EMIT" near the emit signal. and it is executing

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by JonB
            #15

            @swansorter
            Then

            or you have not connected the correct signal instance to the correct slot instance

            (or, for example, your signal or slot objects have gone out of scope or life-time. I don't know what else to say. You know that signals & slots work, so there is a problem in your code.

            Produce a minimal example. To rule out a problem with transferring a const QImage & as the parameter, temporarily change signal & slot to transfer, say, a QString, and emit sendImage("Hello"); till you get that working....

            S 1 Reply Last reply
            0
            • JonBJ JonB

              @swansorter
              Then

              or you have not connected the correct signal instance to the correct slot instance

              (or, for example, your signal or slot objects have gone out of scope or life-time. I don't know what else to say. You know that signals & slots work, so there is a problem in your code.

              Produce a minimal example. To rule out a problem with transferring a const QImage & as the parameter, temporarily change signal & slot to transfer, say, a QString, and emit sendImage("Hello"); till you get that working....

              S Offline
              S Offline
              swansorter
              wrote on last edited by swansorter
              #16

              @JonB i changed to Qstring and hello is not displaying. how to rectify this problem

              KroMignonK JonBJ 2 Replies Last reply
              0
              • S swansorter

                @jsulm Hi i tried

                I defined onGetImage on Mainwindow.h
                public slots:
                void onGetImage(const QImage &img);

                I defined sendImage on my_qlabel.h
                signals:
                void sendImage(const QImage &frame);

                my_qlabel *test_label=new my_qlabel();
                connect(test_label,&my_qlabel::sendImage,this,&MainWindow::onGetImage);

                but it is not displaying the image

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #17

                @swansorter said in How to transffer QImage or QPixmap from one window to another using signals and slots:

                my_qlabel *test_label=new my_qlabel();
                connect(test_label,&my_qlabel::sendImage,this,&MainWindow::onGetImage);

                Is it possible that you're creating another test_label somewhere and emit the signal there?
                Without more information (code) we can't treally help.

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • S swansorter

                  @JonB i changed to Qstring and hello is not displaying. how to rectify this problem

                  KroMignonK Offline
                  KroMignonK Offline
                  KroMignon
                  wrote on last edited by
                  #18

                  @swansorter said in How to transffer QImage or QPixmap from one window to another using signals and slots:

                  i changed to Qstring and hello is not displaying. how to rectify this problem

                  Are you sure the connect() statement was successful?
                  Are you sure to use the right class instance?
                  Can you show my_qlabel class header?

                  It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                  S 1 Reply Last reply
                  0
                  • S swansorter

                    @JonB i changed to Qstring and hello is not displaying. how to rectify this problem

                    JonBJ Offline
                    JonBJ Offline
                    JonB
                    wrote on last edited by
                    #19

                    @swansorter said in How to transffer QImage or QPixmap from one window to another using signals and slots:

                    how to rectify this problem

                    Like I said, produce a minimal example, paste the code, and we will tell you what you are doing wrong.....

                    S 2 Replies Last reply
                    0
                    • JonBJ JonB

                      @swansorter said in How to transffer QImage or QPixmap from one window to another using signals and slots:

                      how to rectify this problem

                      Like I said, produce a minimal example, paste the code, and we will tell you what you are doing wrong.....

                      S Offline
                      S Offline
                      swansorter
                      wrote on last edited by swansorter
                      #20

                      @JonB

                      mainwindow.h file
                      #ifndef MAINWINDOW_H
                      #define MAINWINDOW_H
                      
                      #include <QMainWindow>
                      #include<QRubberBand>
                      #include<my_qlabel.h>
                      namespace Ui {
                      class MainWindow;
                      }
                      
                      class MainWindow : public QMainWindow
                      {
                          Q_OBJECT
                      
                      public:
                          explicit MainWindow(QWidget *parent = 0);
                          ~MainWindow();
                             static QPoint origin;
                             static QPoint Move_test;
                             static QRect f_r;
                       private slots:
                          void onGetImage (QString data);
                      
                      
                      
                      private:
                          Ui::MainWindow *ui;
                          my_qlabel *obj;
                          QPoint origin_x;
                      
                      };
                      
                      #endif // MAINWINDOW_H
                      
                      

                      ``
                      my qlable.h file`
                      #ifndef MY_QLABEL_H
                      #define MY_QLABEL_H

                      #include <QWidget>
                      #include <QLabel>
                      #include <QEvent>
                      #include <QMouseEvent>
                      #include <QDebug>
                      #include<QRubberBand>
                      class my_qlabel : public QLabel
                      {
                      Q_OBJECT
                      public:
                      explicit my_qlabel(QWidget *parent = 0);
                      void mouseMoveEvent(QMouseEvent *ev);
                      void mousePressEvent(QMouseEvent *ev);
                      void mouseReleaseEvent(QMouseEvent *ev);
                      int x,y;
                      signals:
                      void onSendImage(QString data);

                      public slots:
                      private:

                      QRubberBand *rubberBand=0;
                      
                      QPoint origin_x;
                      

                      };

                      #endif // MY_QLABEL_H

                      
                      

                      #include "mainwindow.h"
                      #include "ui_mainwindow.h"
                      QPoint MainWindow::origin;
                      QPoint MainWindow::Move_test;
                      QRect MainWindow::f_r;
                      MainWindow::MainWindow(QWidget *parent) :
                      QMainWindow(parent),
                      ui(new Ui::MainWindow)
                      {
                      ui->setupUi(this);
                      ui->label->setStyleSheet("QLabel{background: yellow;}");
                      obj=new my_qlabel(this);
                      connect(obj,SIGNAL(onSendimage(QString)),this,SLOT(onGetimage(QString)));
                      }

                      MainWindow::~MainWindow()
                      {
                      delete ui;
                      }

                      void MainWindow::onGetimage (QString data)
                      {
                      QPixmap image=data ;
                      ui->label_2->setPixmap(image);
                      }

                      
                      

                      #include "my_qlabel.h"
                      #include<mainwindow.h>
                      my_qlabel::my_qlabel(QWidget *parent) :
                      QLabel(parent)
                      {
                      emit Mouse_Left("image");
                      }

                      void my_qlabel::mouseMoveEvent(QMouseEvent *ev)
                      {
                      this->x = ev->x();
                      this->y = ev->y();
                      rubberBand->setGeometry(QRect(origin_x,ev->pos()).normalized());

                      }

                      void my_qlabel::mousePressEvent(QMouseEvent *ev)
                      {

                      origin_x=ev->pos();
                      if(!rubberBand)
                          rubberBand=new QRubberBand(QRubberBand::Rectangle,this);
                      rubberBand->setGeometry(QRect((origin_x),QSize()));
                      rubberBand->show();
                      

                      }

                      void my_qlabel::mouseReleaseEvent(QMouseEvent *ev)
                      {

                          rubberBand->hide();
                      
                          MainWindow::f_r=rubberBand->geometry();
                          qDebug()<<"f_r"<<MainWindow::f_r;
                          QPixmap  image(rubberBand->geometry().width(),rubberBand->geometry().height());
                          image = grab(rubberBand->geometry()); //copy the selected part
                      
                          emit onSendimage("image");
                      

                      }

                      JonBJ 1 Reply Last reply
                      0
                      • KroMignonK KroMignon

                        @swansorter said in How to transffer QImage or QPixmap from one window to another using signals and slots:

                        i changed to Qstring and hello is not displaying. how to rectify this problem

                        Are you sure the connect() statement was successful?
                        Are you sure to use the right class instance?
                        Can you show my_qlabel class header?

                        S Offline
                        S Offline
                        swansorter
                        wrote on last edited by
                        #21

                        @KroMignon yes i am using right class instance . i have pasted my code

                        KroMignonK jsulmJ 2 Replies Last reply
                        0
                        • S swansorter

                          @KroMignon yes i am using right class instance . i have pasted my code

                          KroMignonK Offline
                          KroMignonK Offline
                          KroMignon
                          wrote on last edited by
                          #22

                          @swansorter said in How to transffer QImage or QPixmap from one window to another using signals and slots:

                          yes i am using right class instance . i have pasted my code

                          Your code seem at little bit confusing to me.
                          Why do you use old connect syntax here:

                          connect(obj,SIGNAL(Mouse_Left(QString)),this,SLOT(Mouse_Left(QString)));
                          

                          and not new syntax?

                          connect(obj,&my_qlabel::Mouse_Left,this, &MainWindow::Mouse_Left);
                          

                          Where did you add obj to the layout?

                          It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

                          1 Reply Last reply
                          1
                          • S swansorter

                            @KroMignon yes i am using right class instance . i have pasted my code

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #23

                            @swansorter And please be so kind and format your code properly to make it easier for others to read it...

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            S 1 Reply Last reply
                            0
                            • JonBJ JonB

                              @swansorter said in How to transffer QImage or QPixmap from one window to another using signals and slots:

                              how to rectify this problem

                              Like I said, produce a minimal example, paste the code, and we will tell you what you are doing wrong.....

                              S Offline
                              S Offline
                              swansorter
                              wrote on last edited by
                              #24

                              @JonB i resolved issue .by changing this
                              connect(obj,SIGNAL(Mouse_Left(QString)),this,SLOT(Mouse_Left(QString)));
                              to
                              connect(ui.label,SIGNAL(Mouse_Left(QString)),this,SLOT(Mouse_Left(QString)));
                              }

                              1 Reply Last reply
                              0
                              • S swansorter

                                @JonB

                                mainwindow.h file
                                #ifndef MAINWINDOW_H
                                #define MAINWINDOW_H
                                
                                #include <QMainWindow>
                                #include<QRubberBand>
                                #include<my_qlabel.h>
                                namespace Ui {
                                class MainWindow;
                                }
                                
                                class MainWindow : public QMainWindow
                                {
                                    Q_OBJECT
                                
                                public:
                                    explicit MainWindow(QWidget *parent = 0);
                                    ~MainWindow();
                                       static QPoint origin;
                                       static QPoint Move_test;
                                       static QRect f_r;
                                 private slots:
                                    void onGetImage (QString data);
                                
                                
                                
                                private:
                                    Ui::MainWindow *ui;
                                    my_qlabel *obj;
                                    QPoint origin_x;
                                
                                };
                                
                                #endif // MAINWINDOW_H
                                
                                

                                ``
                                my qlable.h file`
                                #ifndef MY_QLABEL_H
                                #define MY_QLABEL_H

                                #include <QWidget>
                                #include <QLabel>
                                #include <QEvent>
                                #include <QMouseEvent>
                                #include <QDebug>
                                #include<QRubberBand>
                                class my_qlabel : public QLabel
                                {
                                Q_OBJECT
                                public:
                                explicit my_qlabel(QWidget *parent = 0);
                                void mouseMoveEvent(QMouseEvent *ev);
                                void mousePressEvent(QMouseEvent *ev);
                                void mouseReleaseEvent(QMouseEvent *ev);
                                int x,y;
                                signals:
                                void onSendImage(QString data);

                                public slots:
                                private:

                                QRubberBand *rubberBand=0;
                                
                                QPoint origin_x;
                                

                                };

                                #endif // MY_QLABEL_H

                                
                                

                                #include "mainwindow.h"
                                #include "ui_mainwindow.h"
                                QPoint MainWindow::origin;
                                QPoint MainWindow::Move_test;
                                QRect MainWindow::f_r;
                                MainWindow::MainWindow(QWidget *parent) :
                                QMainWindow(parent),
                                ui(new Ui::MainWindow)
                                {
                                ui->setupUi(this);
                                ui->label->setStyleSheet("QLabel{background: yellow;}");
                                obj=new my_qlabel(this);
                                connect(obj,SIGNAL(onSendimage(QString)),this,SLOT(onGetimage(QString)));
                                }

                                MainWindow::~MainWindow()
                                {
                                delete ui;
                                }

                                void MainWindow::onGetimage (QString data)
                                {
                                QPixmap image=data ;
                                ui->label_2->setPixmap(image);
                                }

                                
                                

                                #include "my_qlabel.h"
                                #include<mainwindow.h>
                                my_qlabel::my_qlabel(QWidget *parent) :
                                QLabel(parent)
                                {
                                emit Mouse_Left("image");
                                }

                                void my_qlabel::mouseMoveEvent(QMouseEvent *ev)
                                {
                                this->x = ev->x();
                                this->y = ev->y();
                                rubberBand->setGeometry(QRect(origin_x,ev->pos()).normalized());

                                }

                                void my_qlabel::mousePressEvent(QMouseEvent *ev)
                                {

                                origin_x=ev->pos();
                                if(!rubberBand)
                                    rubberBand=new QRubberBand(QRubberBand::Rectangle,this);
                                rubberBand->setGeometry(QRect((origin_x),QSize()));
                                rubberBand->show();
                                

                                }

                                void my_qlabel::mouseReleaseEvent(QMouseEvent *ev)
                                {

                                    rubberBand->hide();
                                
                                    MainWindow::f_r=rubberBand->geometry();
                                    qDebug()<<"f_r"<<MainWindow::f_r;
                                    QPixmap  image(rubberBand->geometry().width(),rubberBand->geometry().height());
                                    image = grab(rubberBand->geometry()); //copy the selected part
                                
                                    emit onSendimage("image");
                                

                                }

                                JonBJ Offline
                                JonBJ Offline
                                JonB
                                wrote on last edited by JonB
                                #25

                                @swansorter
                                This is hardly the minimal example I asked for....

                                Do not use SIGNAL/SLOT macros if you are to have any chance of debugging what is going on. You do not even check your connect()s return result. Use the new syntax only.

                                You declare Mouse_Left as a signal, yet you provide your own implementation of a method with that name. I don't know that you can do that.

                                I'm quite mixed up about what are signals and what are slots in main window vs the label.

                                If you want me to look further: Name your slots differently from your signals, else it's too confusing. Reduce to a minimal example. And enclose blocks of code with the form posts' Code tag.

                                UPDATE
                                Crossed with your latest post. Advice: get rid of SIGNAL/SLOT in all your code, only use new style, to help both you and others.

                                S 1 Reply Last reply
                                0
                                • jsulmJ jsulm

                                  @swansorter And please be so kind and format your code properly to make it easier for others to read it...

                                  S Offline
                                  S Offline
                                  swansorter
                                  wrote on last edited by
                                  #26

                                  @jsulm sorry ill do that

                                  1 Reply Last reply
                                  0
                                  • JonBJ JonB

                                    @swansorter
                                    This is hardly the minimal example I asked for....

                                    Do not use SIGNAL/SLOT macros if you are to have any chance of debugging what is going on. You do not even check your connect()s return result. Use the new syntax only.

                                    You declare Mouse_Left as a signal, yet you provide your own implementation of a method with that name. I don't know that you can do that.

                                    I'm quite mixed up about what are signals and what are slots in main window vs the label.

                                    If you want me to look further: Name your slots differently from your signals, else it's too confusing. Reduce to a minimal example. And enclose blocks of code with the form posts' Code tag.

                                    UPDATE
                                    Crossed with your latest post. Advice: get rid of SIGNAL/SLOT in all your code, only use new style, to help both you and others.

                                    S Offline
                                    S Offline
                                    swansorter
                                    wrote on last edited by
                                    #27

                                    @JonB do you have the link for the new style SIGNAL/SLOT Diclaration

                                    jsulmJ JonBJ 2 Replies Last reply
                                    0
                                    • S swansorter

                                      @JonB do you have the link for the new style SIGNAL/SLOT Diclaration

                                      jsulmJ Offline
                                      jsulmJ Offline
                                      jsulm
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #28

                                      @swansorter said in How to transffer QImage or QPixmap from one window to another using signals and slots:

                                      do you have the link for the new style SIGNAL/SLOT Diclaration

                                      Easy to find with Google: https://doc.qt.io/qt-5/signalsandslots.html

                                      https://forum.qt.io/topic/113070/qt-code-of-conduct

                                      1 Reply Last reply
                                      0
                                      • S swansorter

                                        @JonB do you have the link for the new style SIGNAL/SLOT Diclaration

                                        JonBJ Offline
                                        JonBJ Offline
                                        JonB
                                        wrote on last edited by
                                        #29

                                        @swansorter
                                        Additionally to @jsulm, you originally had it with your

                                        connect(test_label,&my_qlabel::sendImage,this,&MainWindow::onGetImage);
                                        

                                        You then changed over to SIGNAL/SLOT, for no discernible reason, which may be a clue as to why it went wrong....

                                        1 Reply Last reply
                                        0

                                        • Login

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