问题在于,每次从我的主窗口启动“设置”窗口时,我都会在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”?如何调用“接受”插槽? –