忽略Qt中的鼠标和键盘事件

时间:2010-02-04 22:25:25

标签: events qt keyboard mouse

在Qt中,我如何忽略所有鼠标和键盘事件,然后停止忽略它们?那就是:点击一个按钮,忽略孩子们的所有事件;再次点击,不要忽略。明白了吗? 我有以下几行,但也许我做错了什么:

setAttribute(Qt::WA_TransparentForMouseEvents);

setFocusPolicy(Qt::NoFocus);

4 个答案:

答案 0 :(得分:11)

不要使用setFocusPolicy(Qt :: NoFocus);它会将事件传播给父母。仅使用setAttribute(Qt :: WA_TransparentForMouseEvents);

答案 1 :(得分:8)

您可以在鼠标和键盘事件中使用事件过滤器,在需要时过滤一些按键或鼠标点击:

yourWidget->installEventFilter(this);

...

bool YourFrm::eventFilter(QObject* pObject, QEvent* pEvent)
{
    if (pEvent->type() == QEvent::KeyPress) 
    {
        QKeyEvent* pKeyEvent = static_cast<QKeyEvent*>(pEvent);
        int PressedKey = pKeyEvent->key();

        if(PressedKey == Qt::Key_Return)
        {
            // Filter Return key....
            return true;
        }

        // standard event processing
        return QObject::eventFilter(pObject, pEvent);
    }
    else if (pEvent->type() == QEvent::MouseButtonPress) 
    {
        QMouseEvent* pMouseEvent = static_cast<QMouseEvent*>(pEvent);

        ... // etc...
    }
    else 
    {
        // standard event processing
        return QObject::eventFilter(pObject, pEvent);
    }
}

有关此问题的更多信息:http://qt.nokia.com/doc/4.6/eventsandfilters.html

希望它有所帮助!

答案 2 :(得分:5)

您可以使用:

QWidget::setEnabled(false)

它会禁用小部件的鼠标和键盘事件。

答案 3 :(得分:4)

你的意思是QGraphicsItem吗?

如果是,您可以致电

void QGraphicsItem::setEnabled ( bool enabled )

要稍后激活该事件,因为该项目不再接收事件,您必须通过场景,因为您无法直接接收该项目的事件。
如果您的问题不是使用GraphicsView框架,而是使用qt的其他部分,则它几乎是相同的过程:
你可以打电话:

QWidget::setEnabled(false) //like Massimo said

为了响应窗口小部件,只需检测应用程序中对象内的按下事件,就可以在窗口小部件上调用`setEnable(true)!

希望它有所帮助! `