简体   繁体   English

信号和插槽错误值发送(Qt c ++)

[英]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. 我编写了一个小程序,通过单击按钮将数据从一个表单(MainWindow)发送到另一个表单(Dialog)。 When the button is clicked the value written in the lineEdit of MainWindow is to be displayed on a label in Dialog form! 单击该按钮时,MainWindow的lineEdit中写入的值将以Dialog格式显示在标签上!

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! 以下是2个标题和2个cpp文件中的相应代码!

MainWindow.h MainWindow.h

class MainWindow : public QMainWindow
{
   Q_OBJECT

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

MainWIndow.cpp 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 Dialog.h

class Dialog : public QDialog
{
   Q_OBJECT

   public slots:
   void setIntData(int data);

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

Dialog.cpp 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! 例如 - 当我点击3并按下按钮时,我得到一个值7237481! How can I correct this? 我怎么能纠正这个?

Replace connect and emit in on_pushButton_clicked() on_pushButton_clicked()替换connect和emit

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);
}

If only once we convey our dialogue, the importance of signal and slot is not necessary. 如果我们只传达一次对话,那么信号和插槽的重要性就没有必要了。 It is possible to give this value to the constructor or to do the initialize function and to give it the values. 可以将此值赋给构造函数或执行初始化函数并为其赋值。

//way 1:
void MainWindow::on_pushButton_clicked(){
    Dialog *dlg = new Dialog();
    connect(this, SIGNAL(SendData(int)), dlg, SLOT(slotData(int)));
    emit SendData(ui->lineEdit->text().toInt());
    dlg->exec();
}

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

//way 2:
void MainWindow::on_pushButton_clicked(){
    Dialog* dlg = new Dialog(ui->lineEdit->text().toInt());
    dlg->exec();
}

//way 3:
#include "dialog.h"
#include "ui_dialog.h"
#include "QDebug"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

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

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


void MainWindow::on_pushButton_clicked(){
    Dialog *dlg = new Dialog();
    dlg->initialize(ui->lineEdit->text().toInt());
    dlg->exec();
}

I think you are showing int value which not initialized. 我认为你显示的是未初始化的int值。

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));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM