qt5 connect()会调用两次问题

时间:2022-02-21 23:11:50
标题描述的不是很清楚
情况是这样的
我的工程中有这么三个文件   paired.cpp  ;  pair.cpp  ;  pairconnect.cpp
在pairconnect.cpp中的connect函数通过单步debug设置断点发现运行了两次,导致后面connect中的内容或者弹窗都是出现两次。

再检查之后发现整个构造函数都是运行两次。(一脸懵逼)

初步猜测是因为:
前两个文件在 private:中定义了
private:
  pairConnect paircon

这样的语句。
然后在pairconnect.cpp中构造函数就会运行两次。

我刚接触qt没多久,遇到这样的事情有点懵逼
1) 可以确定信号只发送了一次,所以connect不是因为信号引起运行两次,确实是构造函数运行两次产生的问题
2) 构造函数里加了qDebug 打印了两次

求问各大神要怎么处理

5 个解决方案

#1


一个信号,两个类都对pairconnect对象进行了实例化,当然会调用两次了

#2


引用 1 楼 ggggyj 的回复:
一个信号,两个类都对pairconnect对象进行了实例化,当然会调用两次了

我猜测就是这个原因。但是偏偏两个都有用到它,请问应该怎么做才能避免这个问题呢?

#3


如果两个类都需要连接信号槽函数,可以在响应槽函数中加标识进行区分,如果只是一个类需要连接信号和槽函数,可以将connect函数提出来不要放在构造函数中,单写一个函数,实例化后再调用

#4


引用 2 楼 qq_31385199 的回复:
Quote: 引用 1 楼 ggggyj 的回复:

一个信号,两个类都对pairconnect对象进行了实例化,当然会调用两次了

我猜测就是这个原因。但是偏偏两个都有用到它,请问应该怎么做才能避免这个问题呢?

不同的类实例化对象时,应避免对象名相同,以便于区分,再实例化后再去connect连接信号槽

#5


引用 4 楼 ggggyj 的回复:
Quote: 引用 2 楼 qq_31385199 的回复:

Quote: 引用 1 楼 ggggyj 的回复:

一个信号,两个类都对pairconnect对象进行了实例化,当然会调用两次了

我猜测就是这个原因。但是偏偏两个都有用到它,请问应该怎么做才能避免这个问题呢?

不同的类实例化对象时,应避免对象名相同,以便于区分,再实例化后再去connect连接信号槽

按你说的将connect语句移出了构造函数,放在了之后再执行。问题就解决了。 多谢讲解

#1


一个信号,两个类都对pairconnect对象进行了实例化,当然会调用两次了

#2


引用 1 楼 ggggyj 的回复:
一个信号,两个类都对pairconnect对象进行了实例化,当然会调用两次了

我猜测就是这个原因。但是偏偏两个都有用到它,请问应该怎么做才能避免这个问题呢?

#3


如果两个类都需要连接信号槽函数,可以在响应槽函数中加标识进行区分,如果只是一个类需要连接信号和槽函数,可以将connect函数提出来不要放在构造函数中,单写一个函数,实例化后再调用

#4


引用 2 楼 qq_31385199 的回复:
Quote: 引用 1 楼 ggggyj 的回复:

一个信号,两个类都对pairconnect对象进行了实例化,当然会调用两次了

我猜测就是这个原因。但是偏偏两个都有用到它,请问应该怎么做才能避免这个问题呢?

不同的类实例化对象时,应避免对象名相同,以便于区分,再实例化后再去connect连接信号槽

#5


引用 4 楼 ggggyj 的回复:
Quote: 引用 2 楼 qq_31385199 的回复:

Quote: 引用 1 楼 ggggyj 的回复:

一个信号,两个类都对pairconnect对象进行了实例化,当然会调用两次了

我猜测就是这个原因。但是偏偏两个都有用到它,请问应该怎么做才能避免这个问题呢?

不同的类实例化对象时,应避免对象名相同,以便于区分,再实例化后再去connect连接信号槽

按你说的将connect语句移出了构造函数,放在了之后再执行。问题就解决了。 多谢讲解