我有一个c ++类,其中有一个信号,并希望将该信号与插槽连接另一个C ++类。这是我的代码
class Data : public QObject
{
Q_OBJECT
public:
static Data *instance(void);
signals:
void sendUserID(const QString& userId);
private:
static Data *s_instance;
};
这是我在另一个班级的老虎机
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>());
}
我们的想法是从Data类访问user_id的值到DataDetails类
正在尝试连接
QObject::connect(&s_instance, SIGNAL(sendUserID(uid), this, SIGNAL(setUserID(uid))
任何其他id来获取uid到其他类也没关系..
答案 0 :(得分:2)
一般来说,当您遇到QObject::connect
...
确保按顺序声明您的声明:
public slot:
部分的一部分)。因为连接信号和插槽只使用在运行时计算的字符串,所以可以编写绝对的废话并进行编译。根据我的经验,拼写错误引起的错误很常见。
bool c = connect(...); Q_ASSERT(c);
)尽早捕获错过的连接。QObject::connect
来避免其中的一些问题。在您的特定情况下:
seTUserID
,但你在连接调用中使用setUserID
。QObject::connect(&s_instance, SIGNAL(sendUserID(const QString), this, SLOT(setUserID(const QString))
答案 1 :(得分:0)
检查seTUserID定义是否标记为插槽。您可能在某些Data方法中调用connect(因为您直接使用私有成员)。您是否尝试使用ref指向s_instance O_o的指针?写sendUserID(const Qstring)(信号的签名)而不是sendUserID(uid)。与setUserID相同的情况。您正在尝试连接到此指针,并希望将信息发送到另一个类!?使用新的Qt连接信号和插槽(指向成员的指针),在Qt 5中引入。检查setUserID是否写得正确。