0

情况是:在“创建课程”中,我单击“Save1”按钮(时间 1,它调用 setUpStep2Action()),进入第 2 步并禁用“Save1”按钮......保存所有信息后,我添加更多课程,因此启用“Save1”按钮。当我单击“Save1”按钮(时间 2)时,它会调用 setUpStep2Action() 2 次。我不知道发生了什么以及如何防止这个问题。谢谢。

无效 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)));
4

3 回答 3

1

我非常同意这里的所有评论,即每次单击按钮时都会添加一个新连接。你说你没有。易于测试。有一个很好的,很少使用的连接选项: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。但是,尽管如此,请用您的所有联系做上述事情。

于 2013-08-29T10:48:08.133 回答
0

正如 RA 的评论中所发布的,您可能多次将clicked()信号连接到插槽。setUpStep2Action()我想这是因为当您添加课程时,您会执行以下操作:

void addCourse()
{
    // ...
    save1Button->setEnabled(true);
    connect(save1Button, SIGNAL(clicked()),
            this,        SLOT(setUpStep2Action()));
}

因此,每次添加课程时都会添加一个连接。相反,您必须做的是connect只调用一次,例如在包含按钮的类的构造函数中。

然后只用这个简化你的addCourse()方法:

void addCourse()
{
    // ...
    save1Button->setEnabled(true);
}
于 2013-08-29T04:41:19.533 回答
0

将连接中的最后一个参数传递为Qt::UniqueConnection.

喜欢

QObject::connect(ui.courseNameLineEdit,SIGNAL(returnPressed()),signalMapper1, SLOT(map()),Qt::UniqueConnection);

于 2020-01-14T09:48:01.797 回答