gpt4 book ai didi

c++ - 为什么我的数据不能在带有 SIGNA1/SLOT 的表单之间传输?

转载 作者:行者123 更新时间:2023-11-28 05:37:37 25 4
gpt4 key购买 nike

我在 Qt 中有主窗口和 1 个对话框(在 Linux 操作系统中)。我想从主窗口向我的对话框发送一些东西。当用户按下菜单按钮时,我的按钮会发出信号。这是我在 main.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) ;

主窗口.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() 因为我不需要显示模态。
我的对话.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() 插槽也有效。但是当对话框显示时全局变量情绪变为 NULL,我也决定将数据保存在标签中。在跟踪情绪中,我看到字符串已发送,但是当对话框显示标签变为默认值时。我找不到错误。你能帮帮我吗?

最佳答案

解决了。
我的错误是在 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();

关于c++ - 为什么我的数据不能在带有 SIGNA1/SLOT 的表单之间传输?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37893341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com