QObject :: connect有太多参数

时间:2018-05-18 18:38:41

标签: c++ multithreading qt

所以我无法使connect()工作。根据QT文档,我看不到任何明显错误的代码。

我不能自由地分享这个项目中的其余代码,我认为它无论如何都不相关,所以我只是提供我的主要功能以及类头文件我的close_thread插槽存在。这似乎是问题持续存在的唯一地方。

基本上,我在main()中创建的工作线程内部有一个while循环执行一堆脏工作。尽管如此,这对我的问题并不十分重要。

我目前遇到的是,当我关闭应用程序时,线程仍然在运行,一切都很糟糕。我的想法是在应用程序关闭之前发送信号,允许线程从其功能返回并在运行时间结束前关闭,从而避免我描述的问题。

目前正在尝试将我的QApplication中的aboutToQuit信号与我的插槽close_thread相连接会产生多个错误,我在下面列出了这些错误。

我在整个项目的其他地方使用了connect(),没有任何问题,所以我对这种特殊的打嗝感到困惑。

 int main(int argc, char *argv[])
 {
     QApplication a(argc, argv);

     MainWindow w;
     WorkerThread worker(w.ui);
     connect(&a, &QApplication::aboutToQuit, &worker, &WorkerThread::close_thread);

     w.show();
     worker.start();

     return a.exec();

}

错误讯息:

  

从“QApplication *”无效转换为“SOCKET {aka unsigned int}”   [-fpermissive]        connect(& a,& QApplication :: aboutToQuit,& worker,& WorkerThread :: close_thread);

           

无法转换'无效   (QCoreApplication :: )(QCoreApplication :: QPrivateSignal)'到'const   sockaddr '用于参数'2'到'int connect(SOCKET,const sockaddr *,   INT)'

非常感谢任何帮助。谢谢你的时间!

1 个答案:

答案 0 :(得分:4)

问题是由名称重叠引起的,您确定要导入以下标题:

#include <sys/types.h>
#include <sys/socket.h>

或包含这些标头的标头,您正在使用该标头中定义的connect

您必须使用QObject的连接方法:

QObject::connect(&a, &QApplication::aboutToQuit, &worker, &WorkerThread::close_thread);