在Qt中,我如何忽略所有鼠标和键盘事件,然后停止忽略它们?那就是:点击一个按钮,忽略孩子们的所有事件;再次点击,不要忽略。明白了吗? 我有以下几行,但也许我做错了什么:
setAttribute(Qt::WA_TransparentForMouseEvents);
setFocusPolicy(Qt::NoFocus);
答案 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)!
希望它有所帮助! `