Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 信号和插槽错误值发送(Qt c+;+;)_C++_Qt_Signals Slots_Qlineedit_Qlabel - Fatal编程技术网

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

C++ 信号和插槽错误值发送(Qt c+;+;),c++,qt,signals-slots,qlineedit,qlabel,C++,Qt,Signals Slots,Qlineedit,Qlabel,我已经编写了一个小程序,通过点击按钮将数据从一个窗体(主窗口)发送到另一个窗体(对话框)。单击按钮时,写入主窗口lineEdit的值将以对话框形式显示在标签上 单击按钮时,标签上会显示一个值,但它与在“行编辑”中输入的值不同! 以下是2个标题和2个cpp文件中的相应代码 主窗口 class MainWindow : public QMainWindow { Q_OBJECT signals: void sendIntData(int data); public:

我已经编写了一个小程序,通过点击按钮将数据从一个窗体(主窗口)发送到另一个窗体(对话框)。单击按钮时,写入主窗口lineEdit的值将以对话框形式显示在标签上

单击按钮时,标签上会显示一个值,但它与在“行编辑”中输入的值不同! 以下是2个标题和2个cpp文件中的相应代码

主窗口

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

}
对话.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();
}
更换按钮上的连接和发射按钮()


请不要在没有解释的情况下发布答案对话框应在MainWindow::MainWindow中分配一次,然后使用show()和hide()。您当前在每次单击时分配内存,而这甚至不是主窗口的父级。@Kushan Peiris这应该会有帮助。这个答案不能正确考虑。因为如果发送代码没有正确更改,变量“data”将永远不会出现在这里。您也在编写代码以尝试更正您的选择,但它不会发生。谢谢。阅读问题注释并检查计时,然后判断。@J.Doe此代码似乎是一个示例(伪代码),问题是他在构造函数中更新QLabel而不是在插槽中。为了你的关心,我提出了一项声明。谢谢
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);
}