所以我无法使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)'
非常感谢任何帮助。谢谢你的时间!
答案 0 :(得分:4)
问题是由名称重叠引起的,您确定要导入以下标题:
#include <sys/types.h>
#include <sys/socket.h>
或包含这些标头的标头,您正在使用该标头中定义的connect。
您必须使用QObject的连接方法:
QObject::connect(&a, &QApplication::aboutToQuit, &worker, &WorkerThread::close_thread);