情况是: 在“创建课程”中,我单击“Save1”按钮(时间1,它调用setUpStep2Action()),它转到步骤2并禁用“Save1”按钮...保存所有信息后,我添加更多课程,所以启用“Save1”按钮。当我点击“Save1”按钮(时间2)时,它会调用setUpStep2Action()2次。 我不知道发生了什么以及如何防止这个问题。 感谢。
void step2SaveAction(int courseId) {
int numElement = ui.rightWidget->count();
if(numElement == 0)
{
QMessageBox::warning(this,tr("Skill choice"),tr("Please choose skills!!"));
return;
}
char* method = "CREATE";
if ( courseId !=0)
method = "EDIT";
setup4Step3(method,courseId,numElement );
ui.addMoreButton->setVisible(true);
}
我把连接放在构造函数中。这是我创建连接的代码:
QSignalMapper *signalMapper1 = new QSignalMapper(this);
signalMapper1->setMapping(ui.courseNameLineEdit,0);
QObject::connect(ui.courseNameLineEdit,SIGNAL(returnPressed()),signalMapper1, SLOT(map()));
QObject::connect(signalMapper1, SIGNAL(mapped(int)),this, SLOT(step1SaveAction(int)));
答案 0 :(得分:0)
如RA发表的评论中所述,您可能会多次将clicked()
信号连接到setUpStep2Action()
广告位。我想这是因为当你添加课程时,你会做类似的事情:
void addCourse()
{
// ...
save1Button->setEnabled(true);
connect(save1Button, SIGNAL(clicked()),
this, SLOT(setUpStep2Action()));
}
因此,每次添加课程时都会添加一个连接。你需要做的只是在包含按钮的类的构造函数中只调用connect
一次。
然后仅使用以下内容简化addCourse()
方法:
void addCourse()
{
// ...
save1Button->setEnabled(true);
}
答案 1 :(得分:0)
我非常同意这里的所有评论,每次点击按钮都会添加新连接。你说你没有。易于测试。有一个很好的,很少使用的连接选项:Qt :: UniqueConnection。
将您的连接更改为:
bool success = false;
success = QObject::connect(ui.courseNameLineEdit,SIGNAL(returnPressed()),
signalMapper1, SLOT(map()),Qt::UniqueConnection);
if(!success){
qFatal() << "Connection failed1";
}
sucess = QObject::connect(signalMapper1, SIGNAL(mapped(int)),this,
SLOT(step1SaveAction(int)),Qt::UniqueConnection);
if(!success){
qFatal() << "Connection failed2";
}
如果你是对的并且你的计划继续运行,我们必须集思广益。 : - )
是的......你没告诉我们关于按钮的事吗?您连接连接LineEdit。但是,尽管如此,还要用你所有的联系做上面的事情。答案 2 :(得分:0)
将连接中的最后一个参数传递为Qt::UniqueConnection.
喜欢
QObject :: connect(ui.courseNameLineEdit,SIGNAL(returnPressed()),signalMapper1,SLOT(map()),Qt :: UniqueConnection);