簡體   English   中英

信號和插槽錯誤值發送(Qt c ++)

[英]Signal and slot wrong value sending(Qt c++)

我編寫了一個小程序,通過單擊按鈕將數據從一個表單(MainWindow)發送到另一個表單(Dialog)。 單擊該按鈕時,MainWindow的lineEdit中寫入的值將以Dialog格式顯示在標簽上!

當我單擊按鈕時,標簽上會顯示一個值,但它與行編輯中輸入的值不同! 以下是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);

}

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! 我怎么能糾正這個?

on_pushButton_clicked()替換connect和emit

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM