Qt - 当组合框活动时未触发keypressevent

时间:2015-07-13 22:06:11

标签: qt pyqt

当我按下组合框时输入 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,当我点击组合框时,该事件也不会传播到此函数。

1 个答案:

答案 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( ... )