qt, signal slots not connecting?
我有一个qdialog,底部有一个按钮框;为什么在出现"信号"时没有触发此插槽?该代码如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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是一个按钮框)。模态对话框正确显示-但是似乎根本没有交互。按下按钮不会触发事件。插槽的声明如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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); } } }; |
(我知道在这里进行这样的字符串比较非常麻烦,但这只是为了验证按钮的快速模拟测试)。但是调试显示此功能从未实现!
编辑:根据建议,查看输出显示出罪魁祸首:
但是,这似乎完全奇怪,因为QDialogBu??ttonBox确实有点击信号?文档
请勿在connect中使用变量名:
1 2 | QObject::connect(box->ui.ChoiceButtons, SIGNAL(clicked(QPushButton*)), box.get(), SLOT(OnClick(QPushButton*))); |
QDialogBu??ttonBox有一个信号
已安装
使用信号/插槽机制时,签名时应非常精确。不允许进行任何强制类型转换,因为
您应该使用
1 | void OnClick(QAbstractButton* b); |