我有一個qdialog,底部有一個buttonbox;爲什麼當一個「信號」發生時,這個插槽不會被觸發?代碼如下所示:qt,信號插槽沒有連接?
std::unique_ptr<MW::GenStd> box(new MW::GenStd(&tOut, &tIn));
box->ui.ChoiceButtons->addButton ("Ask",
QDialogButtonBox::AcceptRole);
box->ui.ChoiceButtons->addButton ("OverWrite",
QDialogButtonBox::AcceptRole);
box->ui.ChoiceButtons->addButton ("merge",
QDialogButtonBox::AcceptRole);
box->ui.ChoiceButtons->addButton ("Skip",
QDialogButtonBox::RejectRole);
QObject::connect(box->ui.ChoiceButtons, SIGNAL(clicked(QPushButton* b)), box.get(), SLOT(OnClick(QPushButton* b)));
return box->exec();
其中MW :: GenStd是一個對話框(和ui.ChoicButtons一個buttonbox)。模式對話框正確顯示 - 但它似乎根本沒有互動。按下按鈕不會觸發事件。插槽聲明如下所示:
public slots:
void OnClick(QPushButton* b) {
auto s(b->text());
if (s == "Merge") {
setResult(2);
} else if (s == "Overwrite") {
setResult(1);
} else if (s == "Skip") {
setResult(0);
} else if (s == "Ask") {
setResult(3);
}
}
};
(我知道這是可怕的,在這裏做這樣的字符串比較,但它只是作爲快速模擬測試以驗證按鈕)。但調試顯示該功能還沒有達到!
編輯:作爲建議要在輸出端表現出了罪魁禍首: Object::connect: No such signal QDialogButtonBox::clicked(QPushButton*) in AskGUISupport.cpp:150
然而,隨着QDialogButtonBox確實有點擊信號,似乎全然陌生? documentation
「ChoiceButtons」的類型是什麼?此外,當連接失敗時,'Qt'將警告輸出到控制檯/調試器,這將非常有用。 – Lol4t0 2012-02-21 15:49:46
@ Lol4t0:這個錯誤彈出'對象::連接:沒有這樣的信號QDialogButtonBox ::點擊(QPushButton *)在AskGUISupport.cpp:150' - 但手動真正的狀態點擊qt是一個信號? – paul23 2012-02-21 15:50:33
爲什麼不直接將QPushButton clicked()信號連接到您的插槽?你不能爲ButtonBox類定義自己的自定義信號(這是一個Qt widget類嗎?),並期望事件循環知道這個信號並自動激發它。 – ksming 2012-02-21 15:53:52