0

我知道有很多相同的问题,但没有一个对我有帮助:

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();
}

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

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

我将 NetBeans 与 QDesigner 一起用于 UI。我必须说这个QT4非常难学。

4

2 回答 2

4

您根本无法将 SIGNAL 与 bool 作为参数连接到 SLOT 与 const char* 作为参数。要执行此类操作,您必须使用QSignalMapper。您有一个如何在文档中使用它的示例。在您的情况下,它非常简单,因此您应该轻松处理它。

于 2012-12-13T18:47:32.130 回答
0

SLOT 函数必须具有与 SIGNAL 函数相同的签名

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

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

于 2012-12-13T18:47:58.350 回答