Qt使用开发板上的按键-思维导图-学习笔记-基于正点原子阿尔法开发板

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() 来识别按下或松开的按键

    • 设置标签文本的属性来反映按键状态

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不迷茫(˵¯͒¯͒˵)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值