为什么我的数据无法在信号/插槽的表格之间传输

Why my data can not transfer between forms with SIGNAl/SLOT?

本文关键字:插槽 表格 之间 传输 信号 数据 我的 为什么      更新时间:2023-10-16

i在qt中有主窗口和1个对话框(在Linux OS中)。我想从主窗口发送一些东西到我的对话框。当用户按菜单按钮时,我的按钮单击发出信号。这是我的代码。cpp:

MainWindow w;
MyDialog m;
//------------------------------
//this connection send key button press mood from MainWindow
QObject::connect(&w,SIGNAL(pressMood(QString)),
          &m,SLOT(getPressMood(QString)));
w.show();  

这是我的mainwindos.h:

signals:
    void pressMood(QString mood) ;

mainwindow.cpp:

void MainWindow::on_btnMenu_clicked()
{
    if(database->checkEmpty())
    {
        menu mn;/*=new menu();*/
        mn.showFullScreen();
    }
    else
    {
       MyDialog *d=new MyDialog(this);
       d->show();
       d->raise();
       d->activateWindow();
emit pressMood("menu");
       if(d->Accepted>0)
       {
           if(loginResult)
           {
               menu *mn=new menu();
               mn->showFullScreen();
           }
       }
       else
           QMessageBox::warning(this, tr("Login failed"), "Sorry.Your authenticate is not valid.", QMessageBox::Ok);
    }
}
//--------------------------------------------
void MainWindow::on_btnPassword_clicked()
{
    //emit sendID2(result);
    CardDialog *d=new CardDialog(this);
     emit pressMood("pass");
    d->show();
    d->raise();
    if(d->Accepted<=0)
        QMessageBox::warning(this, tr("Login failed"), "Sorry.Your authenticate is not valid.", QMessageBox::Ok);
}

我不使用dialog.exec(),因为我不需要显示模态。
mydialog.h:

public slots:
    void getPressMood(QString mood);

和mydialog.cpp://==============================================

void MyDialog::getPressMood(QString mood)
{
    mood=mood;
   //ui->lblMood->setText(mood);;
   //ui->lblMood->hide();
}
void MyDialog::on_buttonBox_accepted()
{
    //QString mood=ui->lblMood->text();
    bool st=database->checkPassword(ui->txtID->text(),ui->txtPass->text(),"3");
    int id=(ui->txtID->text()).toInt();
    //this user is valid to go to menu page
    //s/he is admin
    if((st)&&
            mood=="menu" &&
            database->checkAdmin(id))
    {
         .......
    }

当我按行跟踪我的代码时。发射信号是有效的,它以另一种形式将字符串数据发送到我的插槽,并且也可以使用getpressedmood()插槽。但是,当对话框显示时,全局var的情绪变为零,我也决定将数据保存在标签中。在跟踪情绪中,我看到字符串已发送,但是当对话框显示标签变为默认值时。我找不到错误。你能帮我吗?

它已解决。
我的错误是将信号和插槽连接在main.cpp中。答案是:

    MyDialog *d=new MyDialog(this);
//should connect here not in main.cpp
           QObject::connect(this,SIGNAL(pressMood(QString)),
                          d,SLOT(getPressMood(QString)));
           emit pressMood("menu");
           d->show();
           d->raise();
           d->activateWindow();