Qt / C ++中对class :: slot的未定义引用

时间:2016-04-13 14:18:59

标签: c++ qt

我遇到一个错误,说我对我的插槽有一个未定义的引用。 我的头文件中的相关部分是:

  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”来解决 - 所以我无法找到解决方案。

2 个答案:

答案 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内置插槽,如果编译器失败,则表示您尝试使用的类中没有方法。