[QT QT] El uso de un teclado para hacer ejemplo de detección

Los ejemplos de la utilización de un teclado para hacer que el QT detectado

código de exploración del teclado, código virtual:

Cuando el usuario pulsa una tecla,

1. El teclado detecta esta acción, y el código de exploración (scan code) transmitida al ordenador a través de un controlador de teclado;

códigos de exploración de teclado con hardware específico relacionados, diferentes proveedores pueden tener que escanear el código con una diferencia clave.

2. Después de que se recibe el código de exploración, a la que el teclado conductor ;

3. El controlador de teclado convierte los códigos de exploración teclado virtual para el código;

independiente del hardware virtual de código y específica, teclado diferentes proveedores con un código de tecla virtual es siempre la misma.

3. A continuación, el controlador pasa el código de exploración de teclado y el código de operación teclado virtual y otra información para el sistema operativo;

4. paquete de información del sistema operativo obtenido en un mensaje de teclado, el teclado y el mensaje en la cola de mensajes.

El mensaje del sistema de Windows, el teclado se envía a una ventana de mensaje;

6. Después de que la ventana de la aplicación, donde se recibe el mensaje, puede obtener información sobre el funcionamiento del teclado, entonces la decisión en respuesta a cierta

mensajes de teclado: WM_KEYDOWN

nVirtKey = (int) wParam; // símbolos ficticias

lKeyData = lParam; // información de operación de teclado

WM_KEYDOWN teclado mensaje segundo parámetro complejo lParam

Su función consiste en especificar el número de repeticiones, código de exploración, la bandera de clave extendida, código de contexto, antes de la bandera llave de estado, y el estado de transición como bandera

lParam: longitud total de 4 bytes, 32 bits

Los bits 0-15: Mensaje que especifica el número actual de iteraciones. Cuando el usuario pulsa una tecla durante un período de tiempo,

Este valor es el número de una tecla que se pulsa el conteo automático, si se pulsa la tecla de largo, se emite una pluralidad de mensajes,

Y el número de repeticiones no es acumulativa

16-23: Especifica el código de exploración

24: Especifica si la tecla es una extensión de clave (por ejemplo, Alt, Ctrl), si un valor de 1 es la clave extendida, de lo contrario su valor es 0

25-28: Reservados

29: especifica el código de contexto. Para WM_KEYDOWN, WM_KEYUP mensaje, que es siempre cero,

De los mensajes WM_CHAR, mientras que si se presiona la tecla alt, el valor es 1, de lo contrario un valor de 0.

30: Especifica el estado clave actual. Si el mensaje se envía antes de la tecla, se determinará un valor de 1, de lo contrario 0

31: especifica el estado de transición para la WM_KEYDOWN, cuyo valor es siempre 0;

Para el WM_CHAR, si se suelta la tecla, su valor es 1, y 0 en caso contrario.

Aquí está el código

1. Añadir el archivo de cabecera

#include <QDialog>
#include <QKeyEvent>
#include <QDebug>

2. Añadir una función de declaraciones de variables

private:
    void keyPressEvent(QKeyEvent* );
    void keyReleaseEvent(QKeyEvent *);
    //打印按键信息
    void printKeyEvent(const QString& strAction,
                       QKeyEvent*)const;

3. Agregue el código .cpp

KeyboradDialog::KeyboradDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::KeyboradDialog)
{
    ui->setupUi(this);
}

KeyboradDialog::~KeyboradDialog()
{
    delete ui;
}

void KeyboradDialog::keyPressEvent(QKeyEvent *event){
    printKeyEvent("按下",event);
}
void KeyboradDialog::keyReleaseEvent(QKeyEvent *event){
    printKeyEvent("抬起",event);
}
void KeyboradDialog::printKeyEvent(
        const QString &strAction,
        QKeyEvent *event) const{
    qDebug() << strAction;
    qDebug() << event->text();
    qDebug("按键代码:%d",event->key());
    qDebug("扫描键码:%d",event->nativeScanCode());
    qDebug("虚拟键码:%d",event->nativeVirtualKey());
    qDebug("测试组合按键:");
    Qt::KeyboardModifiers mod;
    mod = event->modifiers();
    if(mod & Qt::ShiftModifier){
        qDebug("<Shift>被按下");
    }
    if(mod & Qt::ControlModifier){
        qDebug("<Ctrl>被按下");
    }
    if(mod & Qt::AltModifier){
        qDebug("<Alt>被按下");
    }
}

4. Ejecutar

Starting G:\QTwork\build-Keyborad-Desktop_Qt_5_6_1_MinGW_32bit-Debug\debug\Keyborad.exe...
"按下"
""
按键代码:16777248
扫描键码:42
虚拟键码:16
测试组合按键:
<Shift>被按下
"抬起"
""
按键代码:16777248
扫描键码:42
虚拟键码:16
测试组合按键:
"按下"
"d"
按键代码:68
扫描键码:32
虚拟键码:68
测试组合按键:
"抬起"
"d"

 

Publicados 201 artículos originales · alabanza won 46 · Vistas a 90000 +

Supongo que te gusta

Origin blog.csdn.net/rong11417/article/details/104475433
Recomendado
Clasificación