問題在於,每次從我的主窗口啓動「設置」窗口時,我都會在Qt Creator中不斷收到'No Slot'運行時錯誤。我發現Qt到目前爲止是非常直觀的,而且這個插槽的信號概念似乎只是簡單地傳遞變量或函數調用而已。基本上,我有一個設置選項的菜單,單擊時,打開一個設置窗口,需要從用戶中獲取一個雙精度,並在主窗口中更新一個var。QT:沒有這樣的插槽
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;
};
設置窗口具有的newval設置爲作爲雙LE1中用戶輸入發射的ValChanged信號接受按鈕它調用接受()。
SettingsWindow.cpp
void SettingsWindow::Accept(){
emit ValChanged(le1->text().toDouble());
this->close();
}
該設置窗口由應用程序的主窗口調用:主窗口
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這臺theVal由用戶指定的值。大多數時候我看到一個問題,不包括Q_OBJECT宏的人,但我已經包括它兩次。有關爲什麼這不起作用的任何建議?
你是moc文件好嗎?你可以在'qt_metacall(QMetaObject :: Call _c,int _id,void ** _ a)'中看到你的插槽嗎? – vrince
是的,它在那裏。它應該全部被定義。 – user850275
有幾個問題需要澄清。哪個插槽在錯誤信息中命名爲「No such slot」?如何調用「接受」插槽? –