QT4 нет такой ошибки слота

Я знаю, что есть много очень похожих вопросов, но ни один из них не помогает мне:

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 для пользовательского интерфейса. Я должен сказать, что этот QT4 очень сложен в изучении.

0

Решение

Вы просто не можете подключить SIGNAL с bool в качестве аргумента к SLOT с const char * в качестве аргумента. Чтобы делать такие вещи, вы должны использовать QSignalMapper. У вас есть пример, как использовать его в документации. В вашем случае это очень просто, поэтому вы должны справиться с этим легко.

4

Другие решения

Функция SLOT должна иметь ту же сигнатуру, что и функция SIGNAL

Редактировать: Из официальной документации Qt (http://qt-project.org/doc/qt-4.8/signalsandslots.html):

Подпись сигнала должна соответствовать подписи принимающего
слот. (На самом деле слот может иметь более короткую подпись, чем сигнал
получает, потому что может игнорировать дополнительные аргументы.)

0

По вопросам рекламы [email protected]