QToolButton发布了()信号两次

时间:2015-05-25 01:14:33

标签: qt

我根据Qt 5.4.1制作了一个颜色选择器。它的工作方式如下:当用户单击一个QToolButton时,它会显示QColorDialog。我使用QToolButton'发布()'信号。现在的问题是,当我关闭QColorDialog时,release()信号再次被触发。但当我把它改成QPushButton时,问题就消失了。

我的工具按钮没有菜单。我想知道QToolButton是设计为这个,还是只是一个bug?因为其他原因,我不能使用QPushButton。那么,是否有一些工作环以使工具按钮工作?

更新

我尝试将下面的代码放在已发布的广告位中:

static int n = 0;
qDebug() << Q_FUNC_INFO << ++n;
return;

每次点击都会增加2个计数器。所以QColorDialog应该没有任何内容。

1 个答案:

答案 0 :(得分:1)

我终于找到了原因。我从未注意到Qt能够自动连接信号和插槽 。也就是说,QMetaObject :: connectSlotsByName()。我意外地给我的插槽一个像

这样的名字
void on_<object name>_<signal name>(<signal parameters>);

样式,这只是&#34; QMetaObject :: connectSlotsByName()&#34;需要。因此,Qt自动将已释放的()信号连接到我的插槽。我也手动连接它们。在Qt中,连接两次信号,它会发射两次,甚至发送器和接收器都是相同的!!!!