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

UI に QDesigner で NetBeans を使用しています。この QT4 を習得するのは非常に難しいと言わざるを得ません。

4

2 に答える 2

4

const char* を引数として SLOT に引数として bool を指定した SIGNAL を接続することはできません。この種のことを行うには、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 に答える