C++ qt,信号插槽未连接?

C++ qt,信号插槽未连接?,c++,qt,signals,C++,Qt,Signals,我有一个qdialog,底部有一个按钮盒;为什么当“信号”出现时,这个插槽没有被触发?代码如下所示: std::unique_ptr<MW::GenStd> box(new MW::GenStd(&tOut, &tIn)); box->ui.ChoiceButtons->addButton ("Ask", QDialogButtonBox::AcceptRole ); box->ui.ChoiceButtons

我有一个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();
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:没有这样的信号QDialogButtonBox::在AskGUISupport.cpp:150中单击(QPushButton*)

然而,这似乎完全奇怪,因为QDialogButtonBox确实有一个点击信号

不要在connect中使用变量名:

QObject::connect(box->ui.ChoiceButtons, SIGNAL(clicked(QPushButton*)), 
                 box.get(), SLOT(OnClick(QPushButton*)));

QDialogButtonBox有一个单击的信号(QAbstractButton*button),因此您需要定义一个插槽
void OnClick(QAbstractButton*b)
,并连接到它。使用QAbstractButton,而不是QPushButton。

QDialogButtonBox
类没有信号

单击(QPushButton*)

它取代了

在使用信号/插槽机制时,签名应该非常精确。不允许任何强制转换,因为
Qt
在内部使用字符串检查签名

您应该使用
clicked(QAbstractButton*)
签名并将插槽调整为accpet
QAbstractButton*
。开槽

void OnClick(QAbstractButton* b);

选择按钮的类型是什么?另外,当连接失败时,
Qt
向控制台/调试器打印警告,这将非常有用。@Lol4t0:这个错误会弹出
Object::connect:没有这样的信号QDialogButtonBox::clicked(QPushButton*)在AskGUISupport.cpp:150中-但是qt手动实际表示单击是一个信号?为什么不将QPushButton clicked()信号直接连接到插槽?您不能为ButtonBox类(这是Qt小部件类吗?)定义自己的自定义信号,并期望事件循环知道该信号并自动触发它。