我有一个qdialog,底部有一个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();
MW::GenStd是一个对话框(ui.ChoicButtons是一个按钮盒)。模态对话框正确显示,但似乎没有互动。按下按钮不会触发事件。插槽声明如下:
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:在AskGUISupport.cpp:150中没有这样的信号QDialogButtonBox :: clicked(QPushButton *)
然而,这似乎非常奇怪,因为QDialogButtonBox确实有一个clicked信号?文档
ChoiceButtons
的类型是什么?另外,当连接失败时,Qt 会将警告打印到控制台/调试器中,这将非常有用。 - Lol4t0Object::connect: No such signal QDialogButtonBox::clicked(QPushButton*) in AskGUISupport.cpp:150
- 但是Qt手册确实说明clicked是一个信号? - paul23