【问题标题】:Qt unwanted double execution of a pushButton pressed signalQt 不需要的双重执行按钮按下信号
【发布时间】:2016-09-29 21:30:13
【问题描述】:

我在设计模式下使用 Qt Creator 3.3.1 创建了一个按钮,并通过设计器将按钮与信号按下()连接起来。它工作正常,但有时当我在按下事件中设置一个按钮来隐藏或显示或更改 stacketWidget 的索引时,信号按下()连续重复两次。我没有在代码中手动连接,但都是由设计人员自动完成的。我正在使用嵌入式 Qt 4.8.6。谢谢

void myclass::on_pushButton_1_pressed()
{

qDebug("Pressed event");
ui->pushButton_2->hide(); //if I comment this line the pressed signal is not repeated twice

}

【问题讨论】:

  • 我可以想象pressed 信号有点特别。它在不同平台上的行为可能不同,因为它可能是底层操作系统的自发事件。例如。单击一个按钮,然后再次拖动,将发出两次(至少在 Windows 中)。尤其是在修改 UI 的时候,我可以很好地想象这是另外一次触发的。我想你在这里基本上不走运......但你真的需要pressed 信号吗? clicked 也不行吗?

标签: c++ qt


【解决方案1】:

Qt 设计器表单有一个名为autoconnect 的功能。如果有一个名为 on_{ObjectName}_{SignalName} 的插槽,它会自动连接表单小部件的信号。

因此,您的插槽连接了两次,一次通过您在设计器中的连接,一次通过自动连接。

在设计器中删除您的连接,或重命名您的插槽以解决额外的调用

【讨论】:

  • 如何在设计器中删除我的连接?我只使用 Qt Creator 3.3.1
  • 这有点奇怪,只有在按下信号时才会发生。释放和点击信号不存在这个问题。
  • 我假设您通过拖放在设计器中连接了信号。是这样吗?如果是这样,您只需在 Edit Signals&Slots 模式下选择连接,然后将其删除(或通过底部的 Signals&Slots 面板)。
  • @Memphis 在您喜欢的编辑器中打开.ui 文件。此外,您不必局限于 Qt Creator 3.3.1:Qt Creator 的版本和它在其套件中使用的 Qt 版本没有任何关系。您可以将最新的 Qt Creator 与任何版本的 Qt4 或 Qt5 一起使用。事实上,您经常会在多个版本和构建共存的情况下使用它。
  • 在设计模式下,我右键单击按钮并选择“转到插槽”,然后选择插槽。这正是我用按钮所做的
猜你喜欢
  • 2021-02-12
  • 2015-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-19
  • 2011-12-15
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多