Search code examples
c++qtsignals-slotsqlineeditqlabel

Signal and slot wrong value sending(Qt c++)


I have written a small program to send data from one form(MainWindow) to another(Dialog) upon a button click. When the button is clicked the value written in the lineEdit of MainWindow is to be displayed on a label in Dialog form!

When I click the button a value is displayed on the label but it is not the same as the value entered in the line edit! following are the respective codes in the 2 header and 2 cpp files!

MainWindow.h

class MainWindow : public QMainWindow
{
   Q_OBJECT

   signals:
   void sendIntData(int data);
   public:
   explicit MainWindow(QWidget *parent = 0);
   ~MainWindow();
}

MainWIndow.cpp

void MainWindow::on_pushButton_clicked()
{
   Dialog *dialog1=new Dialog(this);

   dialog1->setModal(true);
   dialog1->exec();

   int o=ui->lineEdit->text().toInt();


   connect(this, SIGNAL(sendIntData(int)),dialog1, SLOT(setIntData(int)));


   emit sendIntData(o);

}

Dialog.h

class Dialog : public QDialog
{
   Q_OBJECT

   public slots:
   void setIntData(int data);

   public:
   explicit Dialog(QWidget *parent = 0);
   ~Dialog();
}

Dialog.cpp

Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::DIalog)
{
   ui->setupUi(this);
   QString value=QString::number(index);
   ui->label->setText(value);
}

Dialog::~Dialog()
{
   delete ui;
}
void Dialog::setIntData(int data)
{
   index=data;
}

eg-When I click 3 and press the button I get a value 7237481! How can I correct this?


Solution

  • I think you are showing int value which not initialized.

    emit signal:

    int o=ui->lineEdit->text().toInt();
    connect(this, SIGNAL(sendIntData(int)),dialog1, SLOT(setIntData(int)));
    emit sendIntData(o);
    

    Show value:

    void Dialog::setIntData(int data)
    {
       ui->label->setText(QString::number(data));
    }