QT:没有这样的插槽

use*_*275 4 user-interface qt signals-slots qt-creator

问题是我每次从主窗口启动'设置'窗口时都会在Qt Creator中收到'No Such Slot'运行时错误.到目前为止,我发现Qt是非常反直觉的,这个插槽信号概念似乎只是通过简单传递变量或函数调用.基本上,我有一个带有设置选项的菜单,当点击它时,会打开一个设置窗口,需要从用户手中获取一个双精度并更新主窗口中的var.

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;
};
Run Code Online (Sandbox Code Playgroud)

设置窗口有一个接受按钮,它调用Accept(),它发出ValChanged信号,newVal设置为le1中的用户输入为double.

SettingsWindow.cpp

void SettingsWindow::Accept(){
    emit ValChanged(le1->text().toDouble());
    this->close();
}
Run Code Online (Sandbox Code Playgroud)

该设置窗口由应用程序的主窗口调用: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;
};
Run Code Online (Sandbox Code Playgroud)

这个主窗口有一个菜单,可以从中选择设置.这将创建一个新窗口,其中包含一个输入数字的字段.

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;
}
Run Code Online (Sandbox Code Playgroud)

我希望当打开设置窗口时,用户可以在字段中输入val,然后发出ValChanged信号,将Val设置为用户指定的值.大多数时候我看到人们不包括Q_OBJECT宏的问题,但我已经把它包括在内.为什么这不起作用的任何建议?

Cam*_*ron 7

对我来说,public Q_SLOTS:在我的插槽功能上面添加一个我失踪的东西.(我已经有Q_OBJECT等)