QT: Aucun Logement de

Problème est que je reçois le "rien de Tel Fente" erreur d'exécution dans Qt Creator chaque fois que je lance un "paramètres" de la fenêtre de ma fenêtre principale. J'ai trouvé Qt pour être tout à fait contre-intuitif si loin et cette machine à sous 'n des signaux concept semble un peu exagéré, à partir d'un simple passage de vars ou des appels de fonction. J'ai un menu avec une option de paramètres, que quand on clique dessus, ouvre une fenêtre de réglages qui doit attraper un double de l'utilisateur et de mettre à jour une variable dans la fenêtre principale.

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;
};

La fenêtre des paramètres a un bouton "accepter", qui appelle Accept() qui émet de la ValChanged signal avec newVal définir comme la saisie de l'utilisateur dans le1 comme un double.

SettingsWindow.cpp

void SettingsWindow::Accept(){
    emit ValChanged(le1->text().toDouble());
    this->close();
}

Les paramètres de cette fenêtre est appelée par le fenêtre principale de l'application: 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;
};

Cette fenêtre principale dispose d'un menu dont l'un serait sélectionnez paramètres. Cela crée une nouvelle fenêtre avec un champ pour un pour entrer un numéro.

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;
}

Mon espoir est que lorsque les paramètres de la fenêtre est ouverte, l'utilisateur peut entrer un val dans le champ qui émet alors l'ValChanged Signal qui définit theVal à la valeur spécifiée par l'utilisateur. La plupart du temps j'ai vu une émission avec des gens de ne pas y compris les macro q_object, mais je l'ai inclus deux fois. Toutes les suggestions sur pourquoi cela ne fonctionne pas?

Est vous moc fichier correct ? Pouvez-vous voir votre logement, dans le qt_metacall(QMetaObject::Call _c, int _id, void **_a) ?
Ouais, il est là. Il devra être défini.
Quelques questions pour obtenir des éclaircissements.. quelle fente est nommé dans le message d'erreur "No such slot"? Comment est la "Accepter" slot appelé?
Object::connect: No such slot MainWindow::SetVal(double x)
Soit vous avez mal cité le message d'erreur, ou vous miscopied votre code. Le message d'erreur doit être No such slot: MainWindow::SetVal(double) (sans le x). Si le message d'erreur est correcte, et que votre code est vraiment SLOT(SetVal(double x)), alors vous pouvez résoudre le problème en supprimant le x.

OriginalL'auteur user850275 | 2011-07-18