【问题标题】:Qt 4.4: disabled widgets receiving mouse eventsQt 4.4:禁用接收鼠标事件的小部件
【发布时间】:2012-01-18 01:06:36
【问题描述】:

正如标题所示,有没有办法让禁用的小部件接收鼠标事件?

我正在使用QWidget::setEnabled() 来更改小部件的外观,但我仍然想接收它们的鼠标事件。在此先感谢:)

【问题讨论】:

  • 如果你只是想改变它们的外观但仍然让它们交互,我建议你使用一种替代方法而不是禁用小部件。根据定义,禁用的小部件意味着不具有交互性。
  • 是的,我觉得这种类型的实现是不正确的。但是,它是更大系统的一部分,因此暂时必须以这种方式进行:(

标签: qt mouseevent qwidget


【解决方案1】:

您可以使用相关小部件上的事件过滤器来执行此操作。见QObject::eventFilter()。您的实现可能如下所示:

bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
    if (ui->pushButton)
    {
        if (event->type() == QEvent::MouseButtonRelease)
        {
            qDebug() << "mouse button";
            return true;
        } else
        {
            return false;
        }
    } else
    {
        // pass the event on to the parent class
        return QMainWindow::eventFilter(obj, event);
    }
}

即使按钮被禁用,这也会起作用。

【讨论】:

  • 你忘了说你需要先 installEventFilter()。
  • 谢谢。所含链接上的信息已涵盖了这一点,该链接自发布后就中断了。该链接现在有效并且包含该信息。
猜你喜欢
  • 2015-05-19
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
相关资源
最近更新 更多