How can I capture QKeySequence from QKeyEvent depending on current keyboard layout?

后端 未结 7 1463
一向
一向 2020-12-09 12:05

I need to do this for configuring my application. I have QLineEdit field with reimplemented keyPressEvent method.

QKeyEvent *ke = ...
QString txt;

if(ke->         


        
7条回答
  •  自闭症患者
    2020-12-09 12:35

    If someone cares for the python version of the solution of Tihomir Dolapchiev above. I just translated it and it works great. Just posting for future reference.

    class KeySequenceEdit(QtGui.QLineEdit):
        """
        This class is mainly inspired by
        http://stackoverflow.com/a/6665017
    
        """
    
        def __init__(self, keySequence, *args):
            super(KeySequenceEdit, self).__init__(*args)
    
            self.keySequence = keySequence
            self.setKeySequence(keySequence)
    
        def setKeySequence(self, keySequence):
            self.keySequence = keySequence
            self.setText(self.keySequence.toString(QtGui.QKeySequence.NativeText))
    
    
        def keyPressEvent(self, e):
            if e.type() == QtCore.QEvent.KeyPress:
                key = e.key()
    
                if key == QtCore.Qt.Key_unknown:
                    warnings.warn("Unknown key from a macro probably")
                    return
    
                # the user have clicked just and only the special keys Ctrl, Shift, Alt, Meta.
                if(key == QtCore.Qt.Key_Control or
                key == QtCore.Qt.Key_Shift or
                key == QtCore.Qt.Key_Alt or
                key == QtCore.Qt.Key_Meta):
                    print("Single click of special key: Ctrl, Shift, Alt or Meta")
                    print("New KeySequence:", QtGui.QKeySequence(key).toString(QtGui.QKeySequence.NativeText))
                    return
    
                # check for a combination of user clicks
                modifiers = e.modifiers()
                keyText = e.text()
                # if the keyText is empty than it's a special key like F1, F5, ...
                print("Pressed Key:", keyText)
    
                if modifiers & QtCore.Qt.ShiftModifier:
                    key += QtCore.Qt.SHIFT
                if modifiers & QtCore.Qt.ControlModifier:
                    key += QtCore.Qt.CTRL
                if modifiers & QtCore.Qt.AltModifier:
                    key += QtCore.Qt.ALT
                if modifiers & QtCore.Qt.MetaModifier:
                    key += QtCore.Qt.META
    
                print("New KeySequence:", QtGui.QKeySequence(key).toString(QtGui.QKeySequence.NativeText))
    
                self.setKeySequence(QtGui.QKeySequence(key))
    

提交回复
热议问题