Qt使用开发板上的按键
出厂内核设备树中注册的按键
I.MX6U设备树路径为arch/arm/boot/dts/imx6ull-14x14-evk.dts
如何看这个按键的键值对应键盘中的按键
键值宏定义是在<linux/input.h>头文件中
资源简介
ALPHA 开发板的 KEY0 按键原理图
应用实例
按键注册
-
正点原子的出厂内核已经将 KEY0 按键注册为 gpio-keys 类型设备
-
KEY0 键值为 114,对应 Qt 的 Key_VolumeDown 键值
按键功能
-
KEY0 按键可以被当作普通键盘的音量减键使用
-
注意键值为 114 的按键较为特殊,普通键盘上找不到,但某些笔记本电脑可以通过 FN + F6 等组合键模拟
测试按键
-
在本例中,使用 Key_Down(键盘方向键↓)在 Windows/Ubuntu 上进行测试
-
在开发板上则使用 KEY0 按键进行测试
监测 KEY0 方法
-
开发板上有多种方法监测 KEY0 按键
-
可以使用 C 语言创建一个线程监测按键
-
或者按照本例,通过重写键盘事件来监测 KEY0 按键的按下和松开
使用一个标签文本,通过按键按下来改变标签
文本的文字属性
mainwindow.h
-
1 #ifndef MAINWINDOW_H
2 #define MAINWINDOW_H
3
4 #include
5 #include
6 #include
7 #include
8 #include
9
10 class MainWindow : public QMainWindow
11 {
12 Q_OBJECT
13
14 public:
15 MainWindow(QWidget parent = nullptr);
16 ~MainWindow();
17
18 private:
19 / 标签文本 */
20 QLabel label;
21
22 / 重写按键事件 */
23 void keyPressEvent(QKeyEvent *event);
24 void keyReleaseEvent(QKeyEvent *event);
25 };
26
27 #endif // MAINWINDOW_H -
第 23~24 行,声明需要重写的按键事件类型。分别是按下事件和松开事件。通过重写这两个事件可以监测到键盘或 KEY0 按下的状态
mainwindow.cpp
-
1 #include “mainwindow.h”
2 #include
3 #include
4 #include
5
6 MainWindow::MainWindow(QWidget parent)
7 : QMainWindow(parent)
8{
9 / 获取屏幕的分辨率,Qt 官方建议使用这
10 * 种方法获取屏幕分辨率,防上多屏设备导致对应不上
11 * 注意,这是获取整个桌面系统的分辨率
12 */
13 QList <QScreen > list_screen = QGuiApplication::screens();
14
15 / 如果是 ARM 平台,直接设置大小为屏幕的大小 /
16 #if arm
17 / 重设大小 /
18 this->resize(list_screen.at(0)->geometry().width(),
19 list_screen.at(0)->geometry().height());
20 #else
21 / 否则则设置主窗体大小为 800x480 /
22 this->setGeometry(0, 0, 800, 480);
23 #endif
24
25 / 标签实例化 /
26 label = new QLabel(this);
27
28 / 设置默认文本 /
29 #if arm
30 label->setText(“VolumeDown 松开状态”);
31 #else
32 label->setText(“Down 按键松开”);
33 #endif
34
35 / 设置对齐方式 /
36 label->setAlignment(Qt::AlignCenter);
37
38 / 居中显示 */
39 setCentralWidget(label);
40 }
41
42 MainWindow::~MainWindow()
43 {
44 }
45
46 void MainWindow::keyPressEvent(QKeyEvent event)
47 {
48 #if arm
49 / 判断按下的按键,也就是板子 KEY0 按键 /
50 if(event->key() == Qt::Key_VolumeDown) {
51 / 设置 label 的文本 /
52 label->setText(“VolumeDown 按键按下”);
53 }
54 #else
55 / 判断按下的按键,也就是"↓"方向键 /
56 if(event->key() == Qt::Key_Down) {
57 / 设置 label 的文本 /
58 label->setText(“Down 按键按下”);
59 }
60
61 #endif
62 / 保存默认事件 */
63 QWidget::keyPressEvent(event);
64 }
65
66 void MainWindow::keyReleaseEvent(QKeyEvent event)
67 {
68 #if arm
69 / 判断松开的按键,也就是板子 KEY0 按键 /
70 if(event->key() == Qt::Key_VolumeDown) {
71 / 设置 label 的文本 /
72 label->setText(“VolumeDown 按键松开”);
73 }
74 #else
75 / 判断按下的按键,也就是"↓"方向键 /
76 if(event->key() == Qt::Key_Down) {
77 / 设置 label 的文本 /
78 label->setText(“Down 按键松开”);
79 }
80 #endif
81 / 保存默认事件 */
82 QWidget::keyReleaseEvent(event);
83 } -
界面初始化设置(第 9 行~23 行)
-
根据实际屏幕大小设置全屏显示
-
按钮居中显示在屏幕上
-
-
重写按下事件和松开事件(第 46 行~83 行)
-
通过判断 event->key() 来识别按下或松开的按键
-
设置标签文本的属性来反映按键状态
-