如何启用禁用的按钮

Posted

技术标签:

【中文标题】如何启用禁用的按钮【英文标题】:How to enable the disabled button 【发布时间】:2012-09-24 07:37:17 【问题描述】:

我有一个工具按钮,我想在单击它时禁用它(如果它已启用)并在单击它时启用它(它已被禁用)。问题是当点击它时,我写了相应的插槽并且它正在禁用按钮。到目前为止,它正在工作。但是一旦禁用并单击它,它就不会跳转到插槽,它会永远完全禁用。是我使用了错误的功能还是错误的信号?

...
bool mEnable = true;

void Test::OnEnableButtonTriggered() 
  mEnable = !mEnable;
  ui.OnEnable->setEnabled(mEnable);

【问题讨论】:

从用户的角度来看,能够单击禁用按钮有什么好处? 它就像一个切换按钮。当然我可以使用不同的图标,但我认为禁用会起作用。想象一下,您想通过单击此按钮来关闭可视化,然后您想将其打开。我在许多工具中都看到了这一点,并想自己尝试一下 不应该是一个可检查的工具按钮是正确的按钮吗?未按下时,您的可视化处于关闭状态,用户需要按下按钮以打开可视化(并且按钮保持按下状态以可视化其状态)。 没错,这就是我现在发现的,它最适合我的目的。我只需要更改相应的图标就可以了。 【参考方案1】:

您不能直接触发禁用的按钮,但即使可以,您也很可能不应该这样做,因为这很烦人。

我建议您使用 QCheckbox 来实现您想要实现的目标。

如果您仍想使用禁用的按钮,您可能需要查看这篇文章:

Qt 4.4: disabled widgets receiving mouse events

【讨论】:

但是这个按钮和许多其他菜单按钮一起在我的菜单工具栏中。使用 Checkbox 会有点奇怪,需要在它附近添加一个标签 我认为 setCheckable 可能是我的问题的解决方案:当您单击它时它会被按下,并且在您再次单击它之前一直保持按下状态 在这种情况下,切换工具栏图标可能更直观。但是,您仍然可以使用自定义事件过滤器接收事件。 当然,没想到这么明显的解决方案,setCheckable 也可以。【参考方案2】:

QPushButtons 可以设置为可检查。使用isChecked(),您可以读出按钮的状态。连接到toggled() 插槽以处理此状态的更改。

正如 Mark 所指出的,通过单击来禁用(或启用)一个项目是不常见的。禁用某个项目是一种表示单击它不会执行任何操作的方式。

(在发布这个之前,我没有阅读 Mark 的答案下面的 cmets)

【讨论】:

以上是关于如何启用禁用的按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何启用禁用的文本框 onclick 使用角度的按钮

如何管理被禁用/启用的按钮

我如何知道 SwiftUI 按钮是不是已启用/禁用?

如何使用 ionic 2 禁用/启用按钮?

如何禁用/启用对话框负正按钮?

Swift 4 - 如何使用按钮启用/禁用键盘