点击一次pushButton会对相应的slot执行两次

分析原因:

1,使用了可视化设计器设计UI,(RAD方式是高效和协作的一种有效手段)

2,在设计器中设置了signal和slot

3,slot函数采用了on_对象名_signal名的规则或者在代码中显示connect了不是这种规则的函数

要查为什么触发两次,要打开ui文件对应的c++代码,里面有这么一句:

 QObject::connect(pushButton, SIGNAL(clicked()), QtApp1Class, SLOT(on_pushButton_clicked()));

这句代码产生是因为手工进行了signal和slot的设置,

并且该slot符合QT信号-槽默认的连接规则,所以相当与有两句

 QObject::connect(pushButton, SIGNAL(clicked()), QtApp1Class, SLOT(on_pushButton_clicked()));

即,这对信号-槽进行了两次连接,所以会点击一次pushButton会出现两次slot函数on_pushButton_clicked()的调用。

 

解决方案:

A:如果使用设计器进行信号-槽的连接,就要注意函数名不要使用QT默认连接规则,也不要再自行对信号和槽进行连接。

B:不采用设计器进行信号-槽连接,避免不同VS add-in的生成不同,QTCreater和VS add-in的生成规则不同,采用手工连接。

推荐采用手工连接方式。不会出现意想不到的问题。


你可能感兴趣的:(QT)