在我的多个Qt应用程序中,我注意到,无论何时单击菜单栏,调用菜单操作之前,重新发送从GUI中的小部件发送的最后一个信号。大多数时候这并不重要;但在某些场合非常重要。选择菜单动作时发送QWidget信号 - 我如何防止这种情况发生?
在窗口小部件的信号被连接到其自己的时隙中的一个的少数情况下,它是直接地与
if (hasFocus())
{
// ...
}
开始时隙...块,使得这样的伪信号,而不是由所生成的用户实际上点击小部件,可以忽略。
但是,我最近发现,这种行为是负责几个相关的错误,其中虚假信号在被执行之前通过程序的多个层传递,所以简单地检查特定的小部件是否具有焦点并不是微不足道的执行。
我的问题,因此,是:
为什么在地球上点击菜单项使信号在屏幕上其他地方的一个小部件发出?我无法在任何地方找到这种行为?
我该如何阻止它?
非常感谢,
斯蒂芬。
好的,修复了这个问题... 我GUI上的窗口小部件中有80%是QLineEdit的子类,问题实际上只发生在他们身上。有问题的信号是QLineEdit :: editingFinished(),它根据文档发出“当按下Return或Enter键或线条编辑失去焦点”(我强调)。 – 2011-03-04 10:03:33
问题在于当我按下Enter键时,信号正在发射,然后当小部件失去焦点时再次发出信号。所以我在子类中加入了一些代码来拦截QLineEdit :: editingFinished(),检查自上次发出信号后内容是否发生了变化,并且当且仅当有变化时才转发它。 – 2011-03-04 10:05:38