我遇到一个错误,说我对我的插槽有一个未定义的引用。 我的头文件中的相关部分是:
class Window : public QWidget {
Q_OBJECT
..... public slots:
void quit():
........... }
从我的实现文件是:
Window :: Window(){ ...... //设置按钮
button1 = new QPushButton("Quit");
button1->show();
//Connecting
connect(button1, SIGNAL(clicked()), this, SLOT(quit()));
....... }
编译时出现的错误是:
未定义引用`Window :: quit()'
但是,我相信我在连接代码中使用'this'会对此进行定义。在进行连接时,它有我以前的信号和插槽。另外,我在主窗口应用程序中使用了'quit'插槽 - 所以我知道这是一个相关的插槽。
通过搜索论坛,问题通常通过在代码的连接部分使用“this”来解决 - 所以我无法找到解决方案。
答案 0 :(得分:1)
您已声明了名为quit(public slot)的方法,但您从未定义过它。您需要添加定义
void Window::quit()
{
// do your quit stuff here
}
答案 1 :(得分:0)
您是否在班级中实施了Window::quit()
位置?
有一个QApplication::quit
, QWindow :: close QWindow::hide
,它们是内置的。应该手动实现任何不同的东西。
UPD:
如果您阅读Qt智能助理,您会看到否 QWindow::close
以及QWindow::quit
。
那是因为你通常会得到一个带有多个窗口的应用程序,你可以显示或隐藏它们,最多可以销毁它们。要停止应用程序,您使用它的quit
方法,所有窗口将被关闭,销毁并且程序终止。也许,这就是你想要的,如果窗口本身需要做任何事情,那就有不同的故事。
所以,正如塔拉马基所说:
connect(button1, SIGNAL(clicked()), qApp, SLOT(quit()));
再次:不要声明qt内置插槽,如果编译器失败,则表示您尝试使用的类中没有方法。