Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
qt 5中的信号插槽问题 我有一个C++类,其中有一个信号,并且希望将该信号与另一个C++类的槽连接。这是我的密码 class Data : public QObject { Q_OBJECT public: static Data *instance(void); signals: void sendUserID(const QString& userId); private: static Data *s_instance; };_C++_Qt_Qt5_Signals Slots - Fatal编程技术网

qt 5中的信号插槽问题 我有一个C++类,其中有一个信号,并且希望将该信号与另一个C++类的槽连接。这是我的密码 class Data : public QObject { Q_OBJECT public: static Data *instance(void); signals: void sendUserID(const QString& userId); private: static Data *s_instance; };

qt 5中的信号插槽问题 我有一个C++类,其中有一个信号,并且希望将该信号与另一个C++类的槽连接。这是我的密码 class Data : public QObject { Q_OBJECT public: static Data *instance(void); signals: void sendUserID(const QString& userId); private: static Data *s_instance; };,c++,qt,qt5,signals-slots,C++,Qt,Qt5,Signals Slots,这是我在另一个班的位置 void DataDetails::seTUserID(const QString user_id) { QAndroidJniObject user_id = QAndroidJniObject::fromString(user_id); QAndroidJniObject::callStaticMethod<void>("com/user/data/userActivity",

这是我在另一个班的位置

void DataDetails::seTUserID(const QString user_id)
{
 QAndroidJniObject user_id = QAndroidJniObject::fromString(user_id);
 QAndroidJniObject::callStaticMethod<void>("com/user/data/userActivity",
                                          "setUserID",
                                           "(Ljava/lang/String;)V",
                                           user_id.object<jstring>());
}

将uid获取到其他类的任何其他id也可以。

检查seTUserID定义是否标记为插槽。您可能正在某些数据方法中调用connect(因为您直接使用私有成员)。您正在尝试使用指向s_实例O_O的指针的引用吗?写入sendUserID(const Qstring)(信号的签名)而不是sendUserID(uid)。setUserID的情况也一样。您正在尝试连接到此指针,并希望将信息发送到另一个类!?使用Qt5中引入的新型Qt连接信号和插槽(指向成员的指针)。检查setUserID是否写对了。

一般来说,当您遇到
QObject::connect的问题时,

确保您的声明有序:

  • 这两个类在声明中都需要Q_对象宏
  • 确保您的插槽实际声明为插槽(即属于
    公共插槽:
    部分)
因为连接信号和插槽只使用在运行时计算的字符串,所以可以编写绝对无意义的代码并进行编译。根据我的经验,由打字错误引起的错误是很常见的

  • 始终在可以看到应用程序控制台输出的环境中进行测试。失败的连接调用通常会触发打印到stderr的错误消息
  • 仔细检查您的方法名称和签名。即使您输入了错误,代码仍然可以编译
  • 对于调试,使用断言(例如,
    boolc=connect(…);Q_ASSERT(c);
    )尽早捕获丢失的连接
  • 或者,您可以使用Qt4.8中介绍的来避免这些问题

在您的特殊情况下:

  • 函数声明中有一个输入错误:它被称为
    seTUserID
    ,但在connect调用中使用的是
    seTUserID
  • 在信号和插槽名称中使用的是变量名,而不是函数签名。Qt希望看到
    QObject::connect(&s_实例,信号(sendUserID(const QString),这个,插槽(setUserID(const QString))
  • 您已经将一个信号连接到另一个信号,这是有效的,但并不是您想要的(它通常用于链接这样的内容:SomeChildWidget的信号->MyClass1的信号->MyClass2的插槽)

  • 这是否有效:QObject::connect(&s_实例,信号(sendUserID(uid)),this,SLOT(setUserID(uid))?尝试无效数据详细信息::setUserID(const QString&user_id)或将两者的参数都设置为(QString user_id)。不起作用…QObject::connect(&s_实例,信号(sendUserID(uid)),this,SLOT(setUserID(uid));有了这个,错误是“信号”没有在这个范围内声明,我已经检查了这些东西,你在上半部分提到的要点,我遵循了所有,但我面临的错误仍然是“没有这样的槽”,这是因为它没有得到第二类的实例(DataDetails)这就是sigalton,我不知道如何在数据类中获取DataDetails类的实例…你能给我一点指导吗
     QObject::connect(&s_instance, SIGNAL(sendUserID(uid), this, SIGNAL(setUserID(uid))