发出信号时会多次调用时隙
slot is called multiple times when signal is emitted
考虑如下函数:
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();
}
我多次调用函数 1()。函数 2() 也被多次触发
我想要的是,每当发出 sig() 时都应该调用 slt(),但是正在发生的事情是,第一次发出 sig() 时,slt() 被调用的次数是 function1() 被调用的次数。下次调用 sig() 时,不会调用 slt()。如果有人能帮助我实现这一目标,那将是一个很大的帮助......
你应该只调用connect
一次。 将调用connect
的代码移动到仅调用一次的其他函数。
所以我不确定你是否了解你在做什么或你想要什么。所以我会解释正在发生的事情,然后我们可以重新考虑你想要什么。Qt正在按预期工作。您说您希望在发出信号时调用该插槽。这正是您的代码正在做的事情。
现在的问题是...您是否知道每次调用函数 1 时都会创建类 2 的新实例?您确定您不只是想要 class2 的单个实例吗?因为这会以您想要的方式表现得更多。
class2 *obj = 0;
void class1::function1()
{
if(!obj)
{
obj = new class2();
connect(this, SIGNAL(sig()), obj, SLOT(slt()));
}
}
void class2::function2()
{
emit sig();
}
由于我不知道您在哪里创建 class1 的对象,因此我只是根据您提供给我们的内容为您提供了一些东西。这应该以您想要的方式运行。如果这让你感到困惑,我建议你应该谷歌一些关于学习C++或面向对象编程(OOP)的教程。不幸的是,我不能向你推荐任何书籍/教程,否则我会。
我希望这对你有所帮助。
相关文章:
- 重载方法的方式会在使用临时调用时生成编译器错误
- 访问条件类成员的方法不仅在被调用时才编译
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- getopt_long_only第二次调用时返回 -1
- Malloc 在使用线程并行化 SSH 调用时存在问题
- 如何在 c# 代码中通过引用调用时从 c++ dll 更新数组值?
- 读取文件在第二次调用时返回INVALID_HANDLE
- 为什么 c++11 std::normal_distribution 在从函数调用时返回相同的模式?
- 如何使派生类函数在调用时始终调用相同的基类函数?
- QLibrary 函数在第一次调用时工作缓慢
- 在内联程序集中定义函数和从 C++ 调用时出现问题
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 可视C++:XGBoost 从 DLL 调用时不起作用
- 返回类型为struct的函数每次调用时都不返回任何内容
- WTSFreeMemory在启动期间从服务调用时挂起-我应该省略吗
- Qt的新信号/时隙语法问题 - 连接到一个简单的函数
- 迭代器的模板参数:函数在调用时推断类型?
- Qt:有没有什么方法可以调用具有一定时间间隔的时隙序列
- 通过信号和时隙系统调用类函数