【发布时间】:2012-02-21 15:40:45
【问题描述】:
我有一个 qdialog,底部有一个按钮框;当“信号”出现时,为什么这个槽没有被触发?代码如下所示:
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: No such signal QDialogButtonBox::clicked(QPushButton*) in AskGUISupport.cpp:150
然而,这似乎很奇怪,因为 QDialogButtonBox 确实有一个点击信号? documentation
【问题讨论】:
-
ChoiceButtons的类型是什么?此外,当连接失败时,Qt会向控制台/调试器打印警告,这将非常有用。 -
@Lol4t0: 这个错误会弹出
Object::connect: No such signal QDialogButtonBox::clicked(QPushButton*) in AskGUISupport.cpp:150- 但是 qt 手动真的声明点击是一个信号? -
为什么不将 QPushButton clicked() 信号直接连接到您的插槽?您不能为 ButtonBox 类定义自己的自定义信号(这是 Qt 小部件类吗?)并期望事件循环知道该信号并自动触发它。