考虑以下功能:
class1::class1()
{
class3 obj3 = new class3(this);
}
void class1::function1()
{
class2 *obj2 = new class2();
connect(obj3, SIGNAL(sig()), obj2, SLOT(slt()));
}
void class3::function2()
{
emit sig();
}
我多次调用function1()。 function2()也被多次触发
我想要的是,每当发出sig()时,应该调用slt(),但是发生的是,第一次发出sig()时,调用slt()次数调用function1()。 下次调用sig()时,不会调用slt()。 如果有人可以帮助我实现这个目标,那将是一个很大的帮助......
答案 0 :(得分:2)
您只应拨打connect
一次。将调用connect
的代码移动到仅调用一次的其他函数。
答案 1 :(得分:1)
所以我不确定你明白你在做什么或者你想要什么。所以我会解释发生了什么,然后我们可以重新思考你想要的东西。 Qt按预期工作。你说你希望每当发出信号时都要调用插槽。这正是您的代码正在做的事情。
现在的问题是......你是否意识到每次调用function1时都会创建class2的新实例?你确定你不只是想要一个class2的实例吗?因为那样会以你想要的方式表现得更多。
String password = "spK47@wF";
MessageDigest md;
try {
md = MessageDigest.getInstance("MD5");
md.update(password.getBytes("UTF8"));
byte[] digestedPwdBytes = md.digest();
Base64 encoder = new Base64();
System.out.print(new String(encoder.encode(digestedPwdBytes)) +":");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
由于我不知道你在哪里创建了class1的对象,我只是根据你给我们的东西给你一些东西。这应该按照您希望的方式运行。如果这让您感到困惑,我建议你应该学习一些关于学习C ++或面向对象编程(OOP)的教程。不幸的是,我不推荐你任何书籍/教程,否则我会。
我希望这会对你有所帮助。