qt5读取按键值的两种方式

本文介绍了两种在Linux环境下与输入设备驱动交互的方法:一种是使用标准的open/read操作,适用于各种类型的输入设备;另一种则是利用Qt提供的接口针对标准输入设备进行配置。
方式一:

利用linux标准操作文件的方式即:open\read,这种方式适用性比较广既适合于标准输入设备驱动,也适用于非标准设备驱动

void get_device_fd(void)
{ 
  //open the device
  key_fd = open("/dev/input/event1", O_RDONLY);
  if(key_fd < 0)
  {
       printf("open /dev/input/event1 failded...\n");
  }

   /*建立一个socket notifier来接收输入设备发送的数据,当输入设备被按压后就会有数据往上层
    *发送,此时socket会得到通知并通过slot来读取输入设备的数据
    */
   this->notifier = new QSocketNotifier(this->key_fd, QSocketNotifier::Read, this);
   connect(this->notifier, SIGNAL(activated(int)), this, SLOT(getKeyValue()));
}

void getKeyValue()
{
   
  /*这个数组定义方式和大小貌似只能这样定义,有兴趣的可以试试其他的*/
  unsigned short current_button[64]; 
  /*通过read函数读取输入设备的按键值*/
  read(this->key_fd, (char *)current_button, sizeof(current_button));
  /*然后根据需求解析按键值并进行处理(数组的[5]是按键的键值[6]表示按键是按下还是弹起)*/
  if(current_button[5] == KEY_MENU && current_button[6] == 1)
    {

        if(light < 10)
        {
            light++;
            update();
            config.setValue("/sys/brigthness", light);
            brigthness[0] = 0;
            brigthness[1] = light * BACE_BRIGTHNESS;
            ioctl(this->disp_fd, DISP_LCD_SET_BRIGHTNESS, brigthness);
        }
        m_timer->setInterval(5000);
    }
} 


方式二:
对于标准输入设备驱动可以不按上面这种方式,从而避免不必要的麻烦。其实对于标准输入设备qt已经为其
预留了接口,我们要做的只是修改修改环境变量,其环境变量如下

export  QTDIR=/usr/local/Qt-5.4.1/
export  QT_ROOT=$QTDIR
export  PATH=$QTDIR/bin:$PATH

export  LD_LIBRARY_PATH=$QTDIR/lib:/usr/lib/cedarx/:$LD_LIBRARY_PATH

export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export LD_PRELOAD=/usr/lib/libts.so
#按键输入设备环境变量
export QT_QPA_EVDEV_KEYBOARD_PARAMETERS=/dev/input/event1
#/usr/lib/preloadable_libiconv.so:
if [ -e "/dev/input/event4" ]; then
                export QWS_MOUSE_PROTO="Tslib:/dev/input/event4"
		export TSLIB_TSDEVICE=/dev/input/event4
        elif [ -e "/dev/input/event3" ]; then
                export QWS_MOUSE_PROTO="LinuxInput:/dev/input/event3"
		export TSLIB_TSDEVICE=/dev/input/event3
        elif [ -e "/dev/input/event1" ]; then
                export QWS_MOUSE_PROTO="LinuxInput:/dev/input/event1"
		export TSLIB_TSDEVICE=/dev/input/event1
fi
export QT_QPA_PLATFORM=eglfs
export QT_QPA_GENERIC_PLUGINS=tslib

对于qt5环境变量相对与qt4有较大的改变,具体的更改可以参考qt的官方文档



评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值