信号和插槽错误值发送(QT C )

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

本文关键字:QT 插槽 错误 信号      更新时间:2023-10-16

我已经写了一个小程序,将数据(mainwindow)从按钮单击时将数据从一个表单(MainWindow)发送到另一个表单(对话框)。单击按钮时,Mainwindow列中写的值将显示在对话框中的标签上!

当我单击按钮时,标签上显示了一个值,但它与行编辑中输入的值不同!以下是2个标题和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);
}

对话框

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-当我单击3并按下按钮时,我将获得一个值7237481!我该如何纠正?

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

如果只有一旦我们传达对话,则无需信号和插槽的重要性。可以将此值赋予构造函数或执行初始化函数并赋予其值。

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

我认为您正在显示未初始化的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));
}