有没有办法在禁用的 QWidget 上显示工具提示

Posted

技术标签:

【中文标题】有没有办法在禁用的 QWidget 上显示工具提示【英文标题】:Is there a way to show tooltip on disabled QWidget 【发布时间】:2016-10-26 20:35:39 【问题描述】:

我有一个 Qt 表单,其中有一个按钮和菜单。由于各种原因,我可以禁用某些元素,例如按钮或菜单中的某些操作。

有没有一种方法可以显示工具提示,或者当鼠标悬停在禁用的按钮或菜单项上时,并解释为什么它被禁用?

我使用的是 Qt 4.8。

谢谢!

【问题讨论】:

由于某种原因无法编辑我的帖子:当我禁用小部件时,没有工具提示出现,因为禁用的小部件不接收鼠标事件 请提供一些代码。正如我所提到的(现在也更新了我的帖子)工具提示适用于启用和禁用的小部件。也许您正在对收到的事件做一些事情(请参阅here)。 【参考方案1】:

您可以根据QWidget 的状态动态设置工具提示,也可以同时切换两者。从某处禁用/启用小部件后,只需使用 QString 调用 QWidget::setToolTip(...),您希望在将鼠标悬停在给定小部件上时显示工具提示。例如,如果您有一个名为 toggleButton(bool toggleFlag) 的公共插槽,它可以切换按钮的启用设置,您可以这样做:

void MyWidget::toggleButton(bool toggleFlag) 
    this->ui->myButton->setEnabled(toggleFlag);
    this->ui->myButton->setToolTip(toggleFlag ? QString("Enabled wohoo!") : QString("Disabled because I like it"));

您当然也可以通过调用QWidget::isEnabled() 来更改工具提示并根据其返回值进行操作。由于您没有提供任何代码,我只能假设您如何切换按钮,所以我现在只能给您。


更新:在 cmets 中指出,由于未接收鼠标事件,工具提示不适用于禁用的小部件。两种说法都不正确(请注意,我使用了相同的工具提示消息,因为由于缺少最小的工作示例,我不想从头开始编写一个全新的项目,而是使用我现有的项目):

悬停在禁用的按钮上会触发工具提示

悬停已启用的按钮会触发工具提示

【讨论】:

谢谢,也许我应该在我的问题中提到它 - 我会更新它:当我禁用小部件时,没有工具提示出现,因为禁用的小部件不接收鼠标事件 确实如此。在发布之前我已经测试过了。将发布一些图像,以便您可以看到。我还确保我使用的是 Qt 4.8.6 套件,而不是我目前用于开发的 5.7。 抱歉,是的 - 我的逻辑有问题 - 现在我确实看到了禁用按钮上方的工具提示。 很高兴它成功了。顺便说一句,如果有疑问,请务必检查文档,看看您遇到的行为是否以某种方式记录在案。如果没有,那么您要么发现了错误,要么(正如您发现的那样)您的逻辑有问题。在大多数情况下,反映现实的是第二种情况,而不是第一种情况。 ;)

以上是关于有没有办法在禁用的 QWidget 上显示工具提示的主要内容,如果未能解决你的问题,请参考以下文章

winform在禁用控件上显示工具提示

PyQt QWidget的绝对位置

禁用“JSFL 脚本长时间运行”提示

如何使用 jQuery 在浏览器中禁用工具提示?

有没有办法强制显示工具提示?

jQuery 不会在禁用按钮上触发悬停事件吗?