How to transffer QImage or QPixmap from one window to another using signals and slots
-
Hi i want send Qimage or Qpixmap from one window to another ?
-
@swansorter What exactly is the problem?
Create a signal with QImage* or QPixmap* parameter and also a slot with same parameter... -
@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
-
@swansorter said in How to transffer QImage or QPixmap from one window to another using signals and slots:
but it is not displaying the image
What is "not displaying the image"? Your code, as shown, does not do anything about putting the received image into anything on
Mainwindow
in the slot! -
@JonB After receiving the image in the main window i am displaying the the image on qlable .there am not able to see the image.
void MainWindow::onGetImage(const QImage dat)
{ui->label_2->setPixmap(QPixmap::fromImage(dat)); //show "image"
} -
Hi,
How do you create that image ?
Is it valid ?
Are you sure that your slot is called ? -
@swansorter I am receiving the rgb data over tcp client and then after framing the image i am sending it to mainwndow
-
@swansorter
You show aconnect()
but noemit sendImage(...)
. If you are not getting to the slot, where are you emitting the signal? -
@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);
-
@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 aqDebug() << "Slot"
as first statement inonGetImage()
and see whether it gets printed or not. -
@swansorter
Then as I saidEither you do not hit that [
emit
] code or you have not connected the correct signal instance to the correct slot instance -
@swansorter
Thenor 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, aQString
, andemit sendImage("Hello");
till you get that working.... -
@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. -
@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 showmy_qlabel
class header? -
@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.....
-
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");
}