Я знаю, что есть много очень похожих вопросов, но ни один из них не помогает мне:
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 очень сложен в изучении.
Вы просто не можете подключить SIGNAL с bool в качестве аргумента к SLOT с const char * в качестве аргумента. Чтобы делать такие вещи, вы должны использовать QSignalMapper. У вас есть пример, как использовать его в документации. В вашем случае это очень просто, поэтому вы должны справиться с этим легко.
Функция SLOT должна иметь ту же сигнатуру, что и функция SIGNAL
Редактировать: Из официальной документации Qt (http://qt-project.org/doc/qt-4.8/signalsandslots.html):
Подпись сигнала должна соответствовать подписи принимающего
слот. (На самом деле слот может иметь более короткую подпись, чем сигнал
получает, потому что может игнорировать дополнительные аргументы.)