我在Qt遇到了一些问题。我有一个带有信号的类,其参数是字符串,还有一个插槽。我正在将信号连接到类构造函数中的插槽。另外,我在类构造函数中创建一个线程。线程从服务器读取数据并更新UI(发出UpdateMe信号)。这就是我将信号连接到插槽的方式:
QObject::connect(this, SIGNAL(UpdateMe(string, string)), this, SLOT(ModifyUI(string, string)));
我有一个带有一些文件名的QTreeWidget。当我重命名文件时,我通知服务器,服务器通知其他客户端。当我连接单个客户端时没有问题,但是当我连接多个客户端时出现问题:当我从第二个客户端通知服务器时(当我写入套接字时)出现以下错误:
QObject::connect: Cannot queue arguments of type 'QVector<int>'
我尝试用qRegisterMetaType注册QVector,但是当我修改QTreeWidgetItem时(例如当我重命名项目时)我也有一个信号,当我想要更改项目的文本时我需要断开此信号。如果我注册QVector,我就无法断开此信号并且信号会被激活。
答案 0 :(得分:11)
当您注册QVector时,您的通话是否如此?
qRegisterMetaType<QVector<int> >("QVector<int>");
进行此调用后,您应该能够通过排队连接发出QVector类型。
如果我注册QVector,我就无法断开此信号并且信号会被激活。
注册元类型不应该阻止您断开信号。它只允许您对尚未在元系统中注册的类型进行排队。