搜索
bottom↓
回复: 1

《I.MX6U嵌入式Qt开发指南》第二十一章 USER-KEY

[复制链接]

出0入234汤圆

发表于 2021-7-20 11:50:22 | 显示全部楼层 |阅读模式
本帖最后由 正点原子 于 2021-8-11 12:25 编辑

1)实验平台:正点原子i.MX6ULL Linux阿尔法开发板
2)  章节摘自【正点原子】《I.MX6U嵌入式Qt开发指南》
3)购买链接:https://item.taobao.com/item.htm?&id=603672744434
4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/arm-linux/zdyz-i.mx6ull.html
5)正点原子官方B站:https://space.bilibili.com/394620890
6)
正点原子Linux技术交流群:1027879335 1.png


2.jpg


3.png


第二十一章 USER-KEY

       本章是按键实验,介绍如何在Qt应用上使用我们正点原子嵌入式I.MX6ULL Linux开发板上的按键。

21.1 资源简介
     在正点原子的I.MX6U开发板,ALPHA和MINI Linux开发板板载资源上有一个按键。如下图原理图(下图为ALPHA开发板的KEY0按键原理图)。
第二十一章 USER156.png


21.2 应用实例
       想要监测这个KEY0,首先我们正点原子的出厂内核已经默认将这个按键注册成了gpio-keys类型设备,键值为114也就是对应Qt的Key_VolumeDown键值。也就是说我们可以直接当这个按键是我们普通键盘的音量减键使用即可(注意键值为114的按键比较特殊,并不能直接在我们普通的键盘上找到,有些笔记本电脑直接FN + F6等组合直接代替了音量减键)。
我们直接使用了Key_Down(方向键↓)在Windows/Ubuntu上测试,在开发板上还是使用KEY0按键测试。
       在开发板监测这个KEY0有很多方法。比如使用C语言开一个线程监测这个按键,或者按本例一个直接重写键盘事件来监测KEY0按键按下或者松开。
       项目简介:监测KEY0按键的按下和松开。使用一个标签文本,通过按键按下来改变标签文本的文字属性。
       例07_key,监测KEY0(难度简单)。项目路径为Qt/3/07_key。
       在源文件“mainwindow.h”的代码如下。
  
  1.   /******************************************************************
  2.     Copyright © Deng Zhimao Co., Ltd. 1990-2021. All rights reserved.
  3.     * @projectName   07_key
  4.     * @brief         mainwindow.h
  5.     * @author        Deng Zhimao
  6.     * @email         <a href="mailto:1252699831@qq.com" target="_blank">1252699831@qq.com</a>
  7.     * @net            <a href="www.openedv.com" target="_blank">www.openedv.com</a>
  8.     * @date           2021-04-19
  9.     *******************************************************************/
  10. 1   #ifndef MAINWINDOW_H
  11. 2   #define MAINWINDOW_H
  12. 3
  13. 4   #include <QMainWindow>
  14. 5   #include <QKeyEvent>
  15. 6   #include <QLabel>
  16. 7   #include <QDebug>
  17. 8   #include <QEvent>
  18. 9
  19. 10  class MainWindow : public QMainWindow
  20. 11  {
  21. 12      Q_OBJECT
  22. 13
  23. 14  public:
  24. 15      MainWindow(QWidget *parent = nullptr);
  25. 16      ~MainWindow();
  26. 17
  27. 18  private:
  28. 19      /* 标签文本 */
  29. 20      QLabel *label;
  30. 21
  31. 22      /* 重写按键事件 */
  32. 23      void keyPressEvent(QKeyEvent *event);
  33. 24      void keyReleaseEvent(QKeyEvent *event);
  34. 25  };
  35. 26
  36. 27  #endif // MAINWINDOW_H
复制代码

       第23~24行,声明需要重写的按键事件类型。分别是按下事件和松开事件。通过重写这两个事件可以监测到键盘或KEY0按下的状态。
       在源文件“mainwindow.cpp”的代码如下。
  
  1.   /******************************************************************
  2.     Copyright © Deng Zhimao Co., Ltd. 1990-2021. All rights reserved.
  3.     * @projectName   07_key
  4.     * @brief         mainwindow.cpp
  5.     * @author        Deng Zhimao
  6.     * @email         <a href="mailto:1252699831@qq.com" target="_blank">1252699831@qq.com</a>
  7.     * @net            <a href="www.openedv.com" target="_blank">www.openedv.com</a>
  8.     * @date           2021-04-19
  9.     *******************************************************************/
  10. 1   #include "mainwindow.h"
  11. 2   #include <QGuiApplication>
  12. 3   #include <QScreen>
  13. 4   #include <QRect>
  14. 5
  15. 6   MainWindow::MainWindow(QWidget *parent)
  16. 7       : QMainWindow(parent)
  17. 8   {
  18. 9       /* 获取屏幕的分辨率,Qt官方建议使用这
  19. 10       * 种方法获取屏幕分辨率,防上多屏设备导致对应不上
  20. 11       * 注意,这是获取整个桌面系统的分辨率
  21. 12       */
  22. 13      QList <QScreen *> list_screen =  QGuiApplication::screens();
  23. 14
  24. 15      /* 如果是ARM平台,直接设置大小为屏幕的大小 */
  25. 16  #if __arm__
  26. 17      /* 重设大小 */
  27. 18      this->resize(list_screen.at(0)->geometry().width(),
  28. 19                   list_screen.at(0)->geometry().height());
  29. 20  #else
  30. 21      /* 否则则设置主窗体大小为800x480 */
  31. 22      this->setGeometry(0, 0, 800, 480);
  32. 23  #endif
  33. 24
  34. 25      /* 标签实例化 */
  35. 26      label = new QLabel(this);
  36. 27
  37. 28      /* 设置默认文本 */
  38. 29  #if __arm__
  39. 30      label->setText("VolumeDown松开状态");
  40. 31  #else
  41. 32      label->setText("Down按键松开");
  42. 33  #endif
  43. 34
  44. 35      /* 设置对齐方式 */
  45. 36      label->setAlignment(Qt::AlignCenter);
  46. 37
  47. 38      /* 居中显示 */
  48. 39      setCentralWidget(label);
  49. 40  }
  50. 41
  51. 42  MainWindow::~MainWindow()
  52. 43  {
  53. 44  }
  54. 45
  55. 46  void MainWindow::keyPressEvent(QKeyEvent *event)
  56. 47  {
  57. 48  #if __arm__
  58. 49      /* 判断按下的按键,也就是板子KEY0按键 */
  59. 50      if(event->key() == Qt::Key_VolumeDown) {
  60. 51          /* 设置label的文本 */
  61. 52          label->setText("VolumeDown按键按下");
  62. 53      }
  63. 54  #else
  64. 55      /* 判断按下的按键,也就是"↓"方向键 */
  65. 56      if(event->key() == Qt::Key_Down) {
  66. 57          /* 设置label的文本 */
  67. 58          label->setText("Down按键按下");
  68. 59      }
  69. 60
  70. 61  #endif
  71. 62      /* 保存默认事件 */
  72. 63      QWidget::keyPressEvent(event);
  73. 64  }
  74. 65
  75. 66  void MainWindow::keyReleaseEvent(QKeyEvent *event)
  76. 67  {
  77. 68  #if __arm__
  78. 69      /* 判断松开的按键,也就是板子KEY0按键 */
  79. 70      if(event->key() == Qt::Key_VolumeDown) {
  80. 71          /* 设置label的文本 */
  81. 72          label->setText("VolumeDown按键松开");
  82. 73      }
  83. 74  #else
  84. 75      /* 判断按下的按键,也就是"↓"方向键 */
  85. 76      if(event->key() == Qt::Key_Down) {
  86. 77          /* 设置label的文本 */
  87. 78          label->setText("Down按键松开");
  88. 79      }
  89. 80  #endif
  90. 81      /* 保存默认事件 */
  91. 82      QWidget::keyReleaseEvent(event);
  92. 83  }
复制代码

       第9行~23行,界面初始化设置,在嵌入式里,根据实际的屏的大小,设置全屏显示。按钮居中显示。
       第46~83行,重写按下事件和松开事件,通过判断event->key()等哪个按键,就可以知道是哪个按键按下或者松开了。并设置了标签文本的属性。
21.3 程序运行效果
       Ubuntu/Windows上当焦点聚集到此应用程序窗口时,按下方向键“↓”,标签文本的值会改变为“Down按键按下”,当松开方向键“↓”,标签的文本值会改变为默认状态“Down按键松开”。
       开发板上同理,按下KEY0键则会打印“VolumeDown按键按下”,松开KEY0键会打印“VolumeDown按键松开”。

第二十一章 USER4358.png

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2021-7-23 21:08:21 | 显示全部楼层
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 02:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表