2015-12-22 35 views
1

我有一個插槽和信號問題。我創建了按鈕並將它們連接到clicked()插槽。然後我決定手動連接信號和插槽,從那時起,當我點擊按鈕時,它將兩次調用它的功能。連接到按鈕的功能在點擊後會被調用兩次

connect(ui->okButton, SIGNAL(clicked()), this, SLOT(on_okButton_clicked())); 

void settingswindow::on_okButton_clicked() 
{ 
    qDebug() << "ok clicked"; 
    this->close(); 
} 

我一直在尋找對谷歌的答案,但我發現是這樣的:Where is the generated code of qt signals slots editor,但我*的.ui文件看起來像這樣:pastebin to the code。正如你所看到的,只有一條線,沒有其他。我無法找到有關信號和插槽的信息保存在哪裏。重建和清理選項將無濟於事。

+0

看起來像一個Qt的bug。嘗試刪除此按鈕,並再次添加(可能更改它的名稱) – duDE

+1

我不知道該說什麼......我一直在努力像這個問題2小時,我沒有嘗試最簡單的解決方案。要刪除該按鈕並用相同的名稱再次添加它。謝謝duDE! – siwers

+1

這不是一個錯誤。看,讀這個... http://doc.qt.io/qt-5/designer-using-a-ui-file.html#widgets-and-dialogs-with-auto-connect – Devopia

回答

2

這不是Qt中的錯誤。如果您查看ui_*.h文件的生成代碼,您會注意到在setupUi()函數中執行的最後一條語句是致電QMetaObject::connectSlotsByName()

由於您的插槽已符合此功能所尋找的命名約定,因此您的插槽會自動連接至信號。

通過手動將信號連接到插槽,在您的settingswindow類中,可以有效地複製連接。

正如@Devopia提到的,這是一個記錄的功能。