当我按下组合框时输入 keypressevent 时,不会触发keypressevent。当另一个窗口小部件处于活动状态时,有没有办法继续获取事件?
def keyPressEvent(self, event):
if event.key() == 49: #49 = number 1 on keyboard
self.takeScreenshot()
Eventfilter :
def eventFilter(self, obj, event):
if event.type() == QtCore.QEvent.KeyPress:
if event.key() == Qt.Key_Delete:
print datetime.datetime.now().time()
return QtGui.QWidget.eventFilter(self, obj, event)
即使使用eventFilter,当我点击组合框时,该事件也不会传播到此函数。
答案 0 :(得分:2)
它是https://github.com/mitchellh/vagrant/commit/745bdf676675e7b1f25fd7df5a4ed48b582b6dc7但我认为你会发现Python的相同内容:
有时,对象需要查看并可能拦截传递给另一个对象的事件。例如,对话框通常希望过滤某些小部件的按键操作;例如,修改Return-key handling。
bool FilterObject::eventFilter( QObject* object, QEvent* event )
{
if ( ( object == target ) && ( event->type() == QEvent::KeyPress ) )
{
QKeyEvent* keyEvent = static_cast< QKeyEvent* >( event );
if (keyEvent->key() == 49) // Better to use Qt::Key_*
{
return true;
}
else
{
return false;
}
}
return false;
}
所以我建议您使用eventFilter( ... )
。