Qt键盘事件
1. 主要函数
主要重写如下两个函数:键盘按下事件和键盘释放事件
[virtual protected] void QWindow::keyPressEvent(QKeyEvent *event)
[virtual protected] void QWindow::keyReleaseEvent(QKeyEvent *event)
2. QKeyEvent常用函数
Qt::KeyboardModifiers QKeyEvent::modifiers() const
int QKeyEvent::key() const
Qt::KeyboardModifiers QKeyEvent::modifiers() const
Returns the keyboard modifier flags that existed immediately after the event occurred.
Warning: This function cannot always be trusted. The user can confuse it by pressing both Shift keys simultaneously and releasing one of them, for example.
返回事件发生后立即存在的键盘修饰符标志。
警告: 此功能并不总是可信的。例如,用户可以通过同时按下两个 Shift 键并释放其中一个来混淆它。
常见修饰键列表:
枚举名称 | 枚举值 | 键名称解释 |
---|---|---|
Qt::NoModifier | 0x00000000 | No modifier key is pressed. |
Qt::ShiftModifier | 0x02000000 | A Shift key on the keyboard is pressed. |
Qt::ControlModifier | 0x04000000 | A Ctrl key on the keyboard is pressed. |
Qt::AltModifier | 0x08000000 | An Alt key on the keyboard is pressed. |
int QKeyEvent::key() const
Returns the code of the key that was pressed or released.
返回按下或释放键的键名
3. 示例
键盘方向键按下时显示按键名称
// .h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void keyPressEvent(QKeyEvent* event) override;
void keyReleaseEvent(QKeyEvent* event) override;
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
// .cpp文件
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QKeyEvent>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::keyPressEvent(QKeyEvent *event)
{
if (Qt::Key_Left == event->key())
{
ui->labelKeyInfo->setText(QString::fromLocal8Bit("左"));
}
if (Qt::Key_Right == event->key())
{
ui->labelKeyInfo->setText(QString::fromLocal8Bit("右"));
}
if (Qt::Key_Up == event->key())
{
ui->labelKeyInfo->setText(QString::fromLocal8Bit("上"));
}
if (Qt::Key_Down == event->key())
{
ui->labelKeyInfo->setText(QString::fromLocal8Bit("下"));
}
}
void MainWindow::keyReleaseEvent(QKeyEvent *event)
{
}