Qt 4.4:禁用的小部件接收鼠标事件

3

正如标题所示,是否有一种方法使禁用的小部件接收鼠标事件?

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


1
如果您只是想更改它们的外观但仍然使其具有交互性,我建议您使用替代方法而不是禁用小部件。 禁用的小部件根据定义意味着它们不能交互。 - Chris
是的,我觉得这种实现方式是不正确的。但是,它是一个更大系统的一部分,所以暂时必须以这种方式继续进行 :( - Imran NZ
1个回答

2
你可以在相关的小部件上使用事件过滤器来实现这个功能。请参见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()。 - Dainius
谢谢。那个信息已经在包含的链接中涵盖了,但由于发布后链接已经失效。现在链接已经恢复正常,并且包含了那个信息。 - Arnold Spence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接