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

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

我编写了一个小程序,可以在单击按钮时将数据从一种形式 (MainWindow) 发送到另一种形式 (Dialog)。单击按钮时,将在 MainWindow 的 lineEdit 中写入的值以对话框形式显示在标签上!

当我点击按钮时,标签上显示了一个值,但它与行编辑中输入的值不同! 以下分别是2个header和2个cpp文件中的代码!

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

例如,当我点击 3 并按下按钮时,我得到一个值 7237481!我该如何纠正?

我认为您显示的是未初始化的 int 值。

发射信号:

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

显示值:

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

如果只传达一次我们的对话,信号和槽的重要性就没有必要了。 可以将此值赋给构造函数或执行初始化函数并赋值。

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

Replace connect and emit in on_pushButton_clicked()

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