连接到按钮的功能在单击后被调用两次
Function connected to the button is called twice after one click
我对插槽和信号有疑问。我创建了按钮并将它们连接到 clicked() 插槽。然后我决定手动连接信号和插槽,从那时起,当我点击按钮时,它会调用它的函数两次。
connect(ui->okButton, SIGNAL(clicked()), this, SLOT(on_okButton_clicked()));
void settingswindow::on_okButton_clicked()
{
qDebug() << "ok clicked";
this->close();
}
我在 google 上寻找答案,但我只找到了这个:Where is the generated code of qt signals slots editor but my *.ui file looks like this: pastebin to the code。如您所见,只有一行,仅此而已。我找不到有关信号和插槽的信息保存在哪里。重建和清理选项无济于事。
这不是 Qt
中的错误。如果查看为 ui_*.h
文件生成的代码,您会注意到 setupUi()
函数中执行的最后一条语句是对 QMetaObject::connectSlotsByName()
.
的调用
由于您的插槽已经符合此函数正在寻找的命名约定,因此您的插槽会自动连接到信号。
通过手动将信号连接到插槽,在您的 settingswindow
class 中,您可以有效地复制连接。
如@Devopia 所述,这是一个已记录的功能。
我对插槽和信号有疑问。我创建了按钮并将它们连接到 clicked() 插槽。然后我决定手动连接信号和插槽,从那时起,当我点击按钮时,它会调用它的函数两次。
connect(ui->okButton, SIGNAL(clicked()), this, SLOT(on_okButton_clicked()));
void settingswindow::on_okButton_clicked()
{
qDebug() << "ok clicked";
this->close();
}
我在 google 上寻找答案,但我只找到了这个:Where is the generated code of qt signals slots editor but my *.ui file looks like this: pastebin to the code。如您所见,只有一行,仅此而已。我找不到有关信号和插槽的信息保存在哪里。重建和清理选项无济于事。
这不是 Qt
中的错误。如果查看为 ui_*.h
文件生成的代码,您会注意到 setupUi()
函数中执行的最后一条语句是对 QMetaObject::connectSlotsByName()
.
由于您的插槽已经符合此函数正在寻找的命名约定,因此您的插槽会自动连接到信号。
通过手动将信号连接到插槽,在您的 settingswindow
class 中,您可以有效地复制连接。
如@Devopia 所述,这是一个已记录的功能。