2015-07-13 7 views
2

Когда я войти в keypressevent в то время как нажатие на комбобоксе, keypressevent не срабатывает. Есть ли способ получать события, когда активен другой виджет?Qt - не 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, когда я нажав на выпадающий список, событие не распространяется на эту функцию.

ответ

3

Это C++ example, но я думаю, что вы найдете то же самое для Python:

Иногда объект должен смотреть, и, возможно, перехватывать, события, которые доставляются к другому объекту. Например, диалоги обычно хотят фильтровать нажатия клавиш для некоторых виджетов; например, для изменения обработки возвращаемого ключа.

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

+0

Спасибо! Я дам ему попробовать завтра! и дайте вам знать – user1767754

+0

Я дал ему попробовать, с кодом, который я редактировал в моем вопросе, все же, когда я нажимаю на виджет, даже eventfilter не получает его. – user1767754

+0

Вы вызвали функцию ['installEventFilter'] (http://doc.qt.io/qt-4.8/qobject.html#installEventFilter)? Найдите его в связанном примере. –