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

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.0k Views
  • 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
    3 Nov 2021, 09:43

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

    K Offline
    K Offline
    KroMignon
    wrote on 3 Nov 2021, 09:51 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 3 Nov 2021, 11:19
    0
    • S swansorter
      3 Nov 2021, 09:43

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

      J Offline
      J Offline
      JonB
      wrote on 3 Nov 2021, 10:09 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 3 Nov 2021, 11:16
      0
      • J JonB
        3 Nov 2021, 10:09

        @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 3 Nov 2021, 11:16 last edited by swansorter 11 Mar 2021, 11:35
        #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");
        

        }

        J 1 Reply Last reply 3 Nov 2021, 11:29
        0
        • K KroMignon
          3 Nov 2021, 09:51

          @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 3 Nov 2021, 11:19 last edited by
          #21

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

          K J 2 Replies Last reply 3 Nov 2021, 11:25
          0
          • S swansorter
            3 Nov 2021, 11:19

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

            K Offline
            K Offline
            KroMignon
            wrote on 3 Nov 2021, 11:25 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
              3 Nov 2021, 11:19

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

              J Offline
              J Offline
              jsulm
              Lifetime Qt Champion
              wrote on 3 Nov 2021, 11:27 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 3 Nov 2021, 11:29
              0
              • J JonB
                3 Nov 2021, 10:09

                @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 3 Nov 2021, 11:27 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
                  3 Nov 2021, 11:16

                  @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");
                  

                  }

                  J Offline
                  J Offline
                  JonB
                  wrote on 3 Nov 2021, 11:29 last edited by JonB 11 Mar 2021, 11:31
                  #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 3 Nov 2021, 11:32
                  0
                  • J jsulm
                    3 Nov 2021, 11:27

                    @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 3 Nov 2021, 11:29 last edited by
                    #26

                    @jsulm sorry ill do that

                    1 Reply Last reply
                    0
                    • J JonB
                      3 Nov 2021, 11:29

                      @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 3 Nov 2021, 11:32 last edited by
                      #27

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

                      J J 2 Replies Last reply 3 Nov 2021, 11:33
                      0
                      • S swansorter
                        3 Nov 2021, 11:32

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

                        J Offline
                        J Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on 3 Nov 2021, 11:33 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
                          3 Nov 2021, 11:32

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

                          J Offline
                          J Offline
                          JonB
                          wrote on 3 Nov 2021, 11:37 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

                          27/29

                          3 Nov 2021, 11:32

                          • Login

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