C++ 信号和插槽错误值发送(Qt c+;+;)
我已经编写了一个小程序,通过点击按钮将数据从一个窗体(主窗口)发送到另一个窗体(对话框)。单击按钮时,写入主窗口lineEdit的值将以对话框形式显示在标签上 单击按钮时,标签上会显示一个值,但它与在“行编辑”中输入的值不同! 以下是2个标题和2个cpp文件中的相应代码 主窗口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:
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);
}