分析原因:
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的生成规则不同,采用手工连接。
推荐采用手工连接方式。不会出现意想不到的问题。