需求

qt 程序在运行过程中,报了警告 QObject::connect: Cannot queue arguments of type 'qintptr'

解决

跨线程的信号和槽中,如果出现自定义的类型,那么就会报这个问题。解决也很简单。

  1. 在使用这个自定义类的信号和槽的类源文件中,增加头文件 #include <QMetaType>.
  2. 在这个类的构造函数中添加 qRegisterMetaType
#include <QMetaType>

TcpSocket::TcpSocket(qintptr socketDescriptor, QObject *parent) :
    QTcpSocket(parent), socketID(socketDescriptor)
{
    qRegisterMetaType<qintptr>("qintptr");
    this->setSocketDescriptor(socketDescriptor);
    ...
}

参考

QObject::connect: Cannot queue arguments of type “xxx"的解决方案

Qt 线程间信号槽传递自定义数据类型(qRegisterMetaType的使用)

QObject::connect: Cannot queue arguments of type…【已解决】