私はqdialogを持っています。下部にボタンボックスがあります。 「信号」が発生したときに、このスロットが起動しないのはなぜですか?次のようなコードを見て:qt、信号スロットが接続されていませんか?
MW :: GenStdダイアログボックス(およびui.ChoicButtons buttonboxを)です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();
。モーダルダイアログは正しく表示されますが、相互作用していないようです。ボタンを押してもイベントは発生しません。スロットは、次のように宣言されています
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);
}
}
};
(私はそれがここでは、このような文字列比較を行うためにひどく知っているが、それは、ボタンを検証するだけで簡単にモックアップ試験としてもです)。しかし、デバッグでは、その機能に到達していないことがわかります!
EDIT: Object::connect: No such signal QDialogButtonBox::clicked(QPushButton*) in AskGUISupport.cpp:150
しかしQDialogButtonBoxがクリックされた信号を持っていないと全く奇妙なよう:出力を見て提案されているように犯人を示しましたか?
'ChoiceButtons'のタイプは何ですか?また、接続に失敗した場合、 'Qt'はconsole/debuggerに警告を出力します。これは非常に便利です。 – Lol4t0
@ Lol4t0:よくこのエラーは 'オブジェクト::接続:AskGUISupport.cpp:150'のQDialogButtonBox :: clicked(QPushButton *)シグナルをポップアップします。 – paul23
QPushButtonのclicked()シグナルをスロットに直接接続しないのはなぜですか? ButtonBoxクラスに独自のカスタム信号を定義することはできません(これはQtウィジェットクラスですか?)、イベントループがこの信号を知り、それを自動的に発生させることを期待します。 – ksming