2010-07-02 19 views
7

Tengo una aplicación que abre varios widgets secundarios como ventanas separadas, algo como esto: window1 abre la ventana 2 que abre la ventana 3 (forma simplificada).Accesos directos globales PyQt4?

En la ventana principal configuré CTRL + Q como el método abreviado de salida. A continuación se muestra un ejemplo reducido de la clase principal.

class MainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     QtGui.QMainWindow.__init__(self) 
     self.actionExit = QtGui.QAction(_('E&xit'),self) 
     self.actionExit.setShortcut('Ctrl+Q') 
     self.actionExit.setStatusTip(_('Close application')) 
     self.connect(self.actionExit, QtCore.SIGNAL('triggered()'), QtCore.SLOT('close()')) 

Ahora si abro el tercer hijo y presiono CTRL + Q no pasa nada. ¿Hay alguna manera para que los niños hereden la tecla de método abreviado para salir o para que el acceso directo sea global o tengo que declararlo en cada uno de ellos?

Respuesta

3

Intente configurar el ShortcutContext.

self.actionExit.setShortcutContext(QtCore.Qt.ApplicationShortcut) 
+0

lo he intentado, pero por alguna razón no funciona, incluso si los niños han establecido widgets de los padres como el MainWindow: \ – yoshi

+0

¿Usted intentó '' WindowShortcut' o WidgetWithChildrenShortcut'? –

+0

Intenté con las 4 opciones disponibles para setShortcutContext, pero ninguna de las dos funcionó para los niños. – yoshi

11

Esto es lo que he utilizado en __init__ función: QtGui.QShortcut(QtGui.QKeySequence("Ctrl+Q"), self, self.close)

Funciona sin problemas!

0

Usted también puede simplemente establecer un acceso directo para su QAction directamente:

self.actionExit.setShortcut(QtGui.QKeySequence("Ctrl+Q")) 

La única diferencia entre este ejemplo y su código es que la primera es Ctrl+Q fundido a QtGui.QKeySequence.

Cuestiones relacionadas