Проблема в том, что я продолжаю получать ошибку времени выполнения «Нет такого слота» в Qt Creator каждый раз, когда запускаю окно «Настройки» из моего главного окна. До сих пор я обнаружил, что Qt довольно нелогичен, и эта концепция слотов с n-сигналами кажется немного натянутой от простой передачи переменных или вызовов функций. По сути, у меня есть меню с опцией настроек, при нажатии на которую открывается окно настроек, в котором нужно получить двойную у пользователя и обновить переменную в главном окне.
SettingsWindow.h
class SettingsWindow : public QWidget
{
Q_OBJECT
public:
SettingsWindow(QWidget *parent = 0);
signals:
void ValChanged(double newVal);
public slots:
void Accept();
private:
QLineEdit *le1;
};
В окне настроек есть кнопка подтверждения, которая вызывает Accept (), который испускает сигнал ValChanged с newVal, установленным в качестве пользовательского ввода в le1 как double.
SettingsWindow.cpp
void SettingsWindow::Accept(){
emit ValChanged(le1->text().toDouble());
this->close();
}
Это окно настроек вызывается главным окном приложения: MainWindow
mainwindow.cpp
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
public slots:
void SetVal(double x);
private slots:
void NewWindow();
private:
double theVal;
};
В этом главном окне есть меню, из которого можно выбрать настройки. Это создаст новое окно с полем для ввода номера.
mainwindow.cpp
void MainWindow::NewWindow()
{
SettingsWindow *MySettings=new SettingsWindow(this);
QObject::connect(MySettings, SIGNAL(ValChanged(double)), this, SLOT(SetVal(double)));
MySettings->show();
MySettings->raise();
}
void MainWindow::SetVal(double x){
theVal = x;
}
Я надеюсь, что когда откроется окно настроек, пользователь может ввести значение val в поле, которое затем выдает сигнал ValChanged, который устанавливает для значения Val значение, указанное пользователем. Большую часть времени я видел проблему с людьми, не включающими макрос Q_OBJECT, но я включал его оба раза. Любые предложения о том, почему это не работает?