arm按键控制QT界面,实现动态变化。上下左右键按下后,qt界面焦点上下左右移动

erfeiliuqi 2015-10-13 09:44:53
qt的界面和功能已经完成,现在已经下载到arm板子上面跑起来了,使用触摸屏可以正常的控制界面实现各种功能响应。现在要使用自定义的键盘控制这个qt程序,自定义的按键通过gpio口直接和arm核心板连接,一共6个按键,分别是up down right enter esc enter,请问这个怎么个弄法?另外按键的驱动已经修改好了,经过c程序测试没问题。这个自定义的键盘如何控制arm板上的程序呢???!!!
各位老大快出手帮忙了!!
主要是通过上下键切换模块功能,然后点击enter进入模块界面,通过上下左右选中模块内的按钮(按钮有好多)按下enter键后,通过上下键实现属性值的变化(没个按钮代表一种属性)。简而言之就是用按键代替鼠标点击。
...全文
2998 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
daozhongwan 2017-11-27
  • 打赏
  • 举报
回复
朋友,可否借源码一用,1010785316@qq.com,谢谢了
erfeiliuqi 2015-11-05
  • 打赏
  • 举报
回复
引用 4 楼 z55716368 的回复:
大哥 我也是被自定义键盘难到了也是主要是子界面没有焦点需要用鼠标点击控件之后才出现虚框 才能用按键切换 你现在怎么解决的?
这个需要你软件实现,你可以自己封装一个继承QPushButton的按钮类,给每个按钮赋予一个坐标属性(X/Y),然后当焦点在父界面时(这个焦点是可以获取的通过focus函数),你可以规定按右键时焦点跳到子界面的按钮,然后设置当前焦点为这个子界面里的按钮(setfocus函数可以设置焦点)。在子界面里实现上下左右移动,这个按钮坐标属性就起作用了,你可以这样规定----按下右键X不变Y加1,你可以通过类似这样的逻辑实现的焦点移动。说白了就是定义几个链表或vec存储这些按钮,然后再查找,定位。
91program 2015-10-13
  • 打赏
  • 举报
回复
没有什么简单的方法,自己代码实现按键想要的功能吧。
z55716368 2015-10-13
  • 打赏
  • 举报
回复
大哥 我也是被自定义键盘难到了也是主要是子界面没有焦点需要用鼠标点击控件之后才出现虚框 才能用按键切换 你现在怎么解决的?
erfeiliuqi 2015-10-13
  • 打赏
  • 举报
回复
引用 1 楼 91program 的回复:
没有什么简单的方法,自己代码实现按键想要的功能吧。


想了下也是,之前把响应按键和实现焦点切换混为一谭了。实现按键控制焦点上下左右切换觉得应该是个纯软件算法。搞完了把思路分享一下。
erfeiliuqi 2015-10-13
  • 打赏
  • 举报
回复
分享一下我的实现。四楼说的对,首先确定你走的是哪条线(下面链接中的4楼)。我的按键是通过gpio接入cpu的,所以我需要配置内核gpio相关文件,配置烧写内核后,运行c语言测试程序 通过打开/dev/input/event0每个按键都可以响应,表示驱动正常。所以我试探着在QT程序用这个驱动,用到QT,在arm板的文件系统内配置QWS_KEYBOARD 是必须的,我的配置文件是/etc/profile。我配置为QWS_KEYBOARD = gpio-keys:/dev/input/event0,gpio-keys是键盘驱动名,这个名称在内核/linux-3.0.35/drivers/input/keyboard/gpio_keys.c文件中可以找到static struct platform_driver gpio_keys_device_driver = {
.probe = gpio_keys_probe,
.remove = __devexit_p(gpio_keys_remove),
.driver = {
.name = "gpio-keys",
.owner = THIS_MODULE,
#ifdef CONFIG_PM
.pm = &gpio_keys_pm_ops,
#endif
}
};

起初我也失败了,要大胆的想大胆的测试。QWS_KEYBOARD = gpio-keys:/dev/input/event0这个是通过4楼的说法尝试的。
这样我就没有做按键插件,直接用的linux-3.0.35的gpio按键驱动。测试程序可以如下实现,在qt程序中响应按键我分装一个类继承public QObject, public QWSKeyboardHandler,然后通过m_pNotify = new QSocketNotifier(m_iFd, QSocketNotifier::Read, this);
connect(m_pNotify, SIGNAL(activated(int)), this, SLOT(readKbdData()));响应每一个按键,readKbdData为对每个按键的处理槽函数,m_iFd为按键设备文件描述符。

通过按键焦点移动还没有实现,觉得应该是一个纯软件算法。

相同问题链接:
http://bbs.csdn.net/topics/390827489?page=1#post-400460954

19,498

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧