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"