QT4没有这样的插槽错误

时间:2012-12-13 18:34:47

标签: c++ netbeans qt4 signals-slots

我知道有很多问题都是一样的,但没有一个能帮助我:

class Form1 : public QMainWindow {
    Q_OBJECT
public:
    Form1();
    virtual ~Form1();
public slots:
    void langChange(const char* lang_label);
private:
    Ui::Form1 widget;
    void setLangStrings();
};

From1构造函数:

Form1::Form1() {
    widget.setupUi(this);
    connect(widget.btnL0, SIGNAL(clicked(bool)), this, SLOT(langChange("en")));
    connect(widget.btnL1, SIGNAL(clicked(bool)), this, SLOT(langChange("fr")));
    setLangStrings();
}

我也实现了这个langChange函数:

void Form1::langChange(const char* lang_label)
{
    GL_LANG = lang_label;
    setLangStrings();
}

调用connect函数时出现这个愚蠢的错误:

No such slot Form1::langChange("sl") in Form1.cpp:15

我正在将NetBeans与QDesigner一起用于UI。我必须说这个QT4很难学。

2 个答案:

答案 0 :(得分:4)

您根本无法将SIGNAL与bool作为参数连接到SLOT,并使用const char *作为参数。要做这种事情,你必须使用QSignalMapper。您有一个示例如何在文档中使用它。在你的情况下,它非常简单,所以你应该很容易处理它。

答案 1 :(得分:0)

SLOT功能必须具有与SIGNAL功能相同的签名

编辑:从官方Qt文档(http://qt-project.org/doc/qt-4.8/signalsandslots.html):

  

信号的签名必须与接收的签名相匹配   插槽。 (事实上​​,一个插槽的签名可能比它的信号更短   收到因为它可以忽略额外的参数。)