信号和插槽错误值发送(QT C )
Signal and slot wrong value sending(Qt c++)
我已经写了一个小程序,将数据(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));
}
相关文章:
- QT 插槽未在主线程上调用
- Qt插槽调用了两次
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 连接来自 C++98 接口的 Qt 插槽和信号,无需 Qt、STL 或 Boost
- 有没有办法调试排队等待对象的Qt插槽调用
- QT插槽未激活
- QT- QT插槽问题
- QT插槽和信号,显示第二形式/窗口
- QT插槽未在多线程DLL中执行
- 调试QT插槽未调用
- Qt插槽参数已损坏
- 如何使用Qt插槽中的QwtPplot绘制
- 如何将 QAction 从 QMenu 传递到 Qt 插槽
- Qt 插槽和信号语法
- 如何映射到重载Qt插槽
- Qt插槽,没有用于调用的匹配功能
- Qt插槽调用两次
- 调用未连接的Qt插槽.调用未连接的
- 从线程应用程序中的QtScript调用的Qt插槽
- QT插槽问题,链接错误