QT/E中怎样响应开发板的按键事件?

车太靓 2011-01-04 07:41:00
qt的界面和功能已经完成,现在已经下载到arm板子上面跑起来了,使用触摸屏可以正常的控制界面实现各种功能响应。现在要使用自定义的键盘控制这个qt程序,自定义的按键通过gpio口直接和arm核心板连接,一共8个按键,分别是up down right enter esc,还有两个自定义的功能键,请问这个怎么个弄法?另外按键的驱动已经修改好了,经过测试没问题。这个自定义的键盘如何控制arm板上的程序呢???!!!
qt已经折腾不轻了,又要在这里折腾啦,各位老大快出手帮忙了!!
...全文
2119 38 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
流氓非流氓 2013-08-31
  • 打赏
  • 举报
回复
请参考 http://blog.csdn.net/flyeagle022/article/details/7785573 ,还有http://download.csdn.net/download/zh_g_yang/2536319 讲的比较详细,个人认为很有参考价值!
Andy_Binary 2013-08-16
  • 打赏
  • 举报
回复
引用 35 楼 lishi_1991 的回复:
[quote=引用 34 楼 donganwu 的回复:] [quote=引用 32 楼 lishi_1991 的回复:] [quote=引用 31 楼 cocoxiaomei 的回复:] 引用 30 楼 lishi_1991 的回复:我现在也遇到楼主这样的问题了,qt触摸屏界面搭建完成,这个自定义按键怎么控制qt程序呢。我想通过定时检测按键驱动获得哪个键被按下 然后通过信号与槽函数来实现但是实现不了 楼主是怎么解决的呢 你这个方法应该就可行啊。我类似就是这样处理的,没有问题啊。我是用了一个单独的线程来实时检测按键的。
上次是按键驱动除了问题,现在都好了 就是这么干的!谢谢哈[/quote] hi,lishi_1991,看了你的其他帖子,你做Qt按键的思路我大概看懂,可是你提到的“定时检测按键驱动获得哪个键被按下”,其中的按键驱动是什么,你自己做的按键驱动在/dev下的一个设备文件?你的按键按下后会往这个文件里写值?然后让Qt来读取?还是 我在其他地方http://blog.csdn.net/iskemin/article/details/5050448看到 是不是指/dev/input/eventX里的一个设备,你按键往event里写值,让Qt来读? 这个部分可不可以详细和我说下,我的QQ410315462 ,要能Q聊最好了,谢谢呀![/quote]您好,近来比较忙,今天先加你QQ明天或者后天再和你交流[/quote] 问题已解决,按网上博客的方法做了键盘插件,不过有一些细节的方面网上说的不清楚,一开始按键总是没反应,后来不断尝试出来了
lishi_1991 2013-08-09
  • 打赏
  • 举报
回复
引用 33 楼 z601316152 的回复:
[quote=引用 32 楼 lishi_1991 的回复:] [quote=引用 31 楼 cocoxiaomei 的回复:] 引用 30 楼 lishi_1991 的回复:我现在也遇到楼主这样的问题了,qt触摸屏界面搭建完成,这个自定义按键怎么控制qt程序呢。我想通过定时检测按键驱动获得哪个键被按下 然后通过信号与槽函数来实现但是实现不了 楼主是怎么解决的呢 你这个方法应该就可行啊。我类似就是这样处理的,没有问题啊。我是用了一个单独的线程来实时检测按键的。
上次是按键驱动除了问题,现在都好了 就是这么干的!谢谢哈[/quote] 自定义的按键驱动需要自己写吗?不会写按键驱动怎么办呀。。。。。 大侠[/quote]额,我也不会写按键驱动,这个按键驱动想写好比较难吧。我用的内核里面提供了按键驱动,我直接打开就会在文件系统下生成驱动节点!
lishi_1991 2013-08-09
  • 打赏
  • 举报
回复
引用 34 楼 donganwu 的回复:
[quote=引用 32 楼 lishi_1991 的回复:] [quote=引用 31 楼 cocoxiaomei 的回复:] 引用 30 楼 lishi_1991 的回复:我现在也遇到楼主这样的问题了,qt触摸屏界面搭建完成,这个自定义按键怎么控制qt程序呢。我想通过定时检测按键驱动获得哪个键被按下 然后通过信号与槽函数来实现但是实现不了 楼主是怎么解决的呢 你这个方法应该就可行啊。我类似就是这样处理的,没有问题啊。我是用了一个单独的线程来实时检测按键的。
上次是按键驱动除了问题,现在都好了 就是这么干的!谢谢哈[/quote] hi,lishi_1991,看了你的其他帖子,你做Qt按键的思路我大概看懂,可是你提到的“定时检测按键驱动获得哪个键被按下”,其中的按键驱动是什么,你自己做的按键驱动在/dev下的一个设备文件?你的按键按下后会往这个文件里写值?然后让Qt来读取?还是 我在其他地方http://blog.csdn.net/iskemin/article/details/5050448看到 是不是指/dev/input/eventX里的一个设备,你按键往event里写值,让Qt来读? 这个部分可不可以详细和我说下,我的QQ410315462 ,要能Q聊最好了,谢谢呀![/quote]您好,近来比较忙,今天先加你QQ明天或者后天再和你交流
Andy_Binary 2013-08-07
  • 打赏
  • 举报
回复
引用 32 楼 lishi_1991 的回复:
[quote=引用 31 楼 cocoxiaomei 的回复:] 引用 30 楼 lishi_1991 的回复:我现在也遇到楼主这样的问题了,qt触摸屏界面搭建完成,这个自定义按键怎么控制qt程序呢。我想通过定时检测按键驱动获得哪个键被按下 然后通过信号与槽函数来实现但是实现不了 楼主是怎么解决的呢 你这个方法应该就可行啊。我类似就是这样处理的,没有问题啊。我是用了一个单独的线程来实时检测按键的。
上次是按键驱动除了问题,现在都好了 就是这么干的!谢谢哈[/quote] hi,lishi_1991,看了你的其他帖子,你做Qt按键的思路我大概看懂,可是你提到的“定时检测按键驱动获得哪个键被按下”,其中的按键驱动是什么,你自己做的按键驱动在/dev下的一个设备文件?你的按键按下后会往这个文件里写值?然后让Qt来读取?还是 我在其他地方http://blog.csdn.net/iskemin/article/details/5050448看到 是不是指/dev/input/eventX里的一个设备,你按键往event里写值,让Qt来读? 这个部分可不可以详细和我说下,我的QQ410315462 ,要能Q聊最好了,谢谢呀!
我鲁班无敌 2013-07-25
  • 打赏
  • 举报
回复
引用 32 楼 lishi_1991 的回复:
[quote=引用 31 楼 cocoxiaomei 的回复:] 引用 30 楼 lishi_1991 的回复:我现在也遇到楼主这样的问题了,qt触摸屏界面搭建完成,这个自定义按键怎么控制qt程序呢。我想通过定时检测按键驱动获得哪个键被按下 然后通过信号与槽函数来实现但是实现不了 楼主是怎么解决的呢 你这个方法应该就可行啊。我类似就是这样处理的,没有问题啊。我是用了一个单独的线程来实时检测按键的。
上次是按键驱动除了问题,现在都好了 就是这么干的!谢谢哈[/quote] 自定义的按键驱动需要自己写吗?不会写按键驱动怎么办呀。。。。。 大侠
轻舞 2013-04-22
  • 打赏
  • 举报
回复
引用 30 楼 lishi_1991 的回复:
我现在也遇到楼主这样的问题了,qt触摸屏界面搭建完成,这个自定义按键怎么控制qt程序呢。我想通过定时检测按键驱动获得哪个键被按下 然后通过信号与槽函数来实现但是实现不了 楼主是怎么解决的呢
你这个方法应该就可行啊。我类似就是这样处理的,没有问题啊。我是用了一个单独的线程来实时检测按键的。
lishi_1991 2013-04-22
  • 打赏
  • 举报
回复
引用 31 楼 cocoxiaomei 的回复:
引用 30 楼 lishi_1991 的回复:我现在也遇到楼主这样的问题了,qt触摸屏界面搭建完成,这个自定义按键怎么控制qt程序呢。我想通过定时检测按键驱动获得哪个键被按下 然后通过信号与槽函数来实现但是实现不了 楼主是怎么解决的呢 你这个方法应该就可行啊。我类似就是这样处理的,没有问题啊。我是用了一个单独的线程来实时检测按键的。
上次是按键驱动除了问题,现在都好了 就是这么干的!谢谢哈
jxd9955 2013-04-15
  • 打赏
  • 举报
回复
楼主的问题解决了吗 求解答
lishi_1991 2013-04-15
  • 打赏
  • 举报
回复
我现在也遇到楼主这样的问题了,qt触摸屏界面搭建完成,这个自定义按键怎么控制qt程序呢。我想通过定时检测按键驱动获得哪个键被按下 然后通过信号与槽函数来实现但是实现不了 楼主是怎么解决的呢
_剪烛西窗_ 2013-04-09
  • 打赏
  • 举报
回复
楼主问题解决了么,遇到相同问题,求大能帮忙!!!!
sno_guo 2012-05-18
  • 打赏
  • 举报
回复
请问下,各位!

楼上说的这样问题解决了吗,我现在也遇到这样的事情,我的环境是S3C2440+linux+qt4.6.3, 我板子上有25个按键,设计的UI界面分成3层,每层大概有10个widget 。

是不是只能用QT插件的形式来做这个,谢谢了
jianwushuang 2012-03-21
  • 打赏
  • 举报
回复
同求,经测试,按键驱动可以使用,纯C代码测试通过。
但在QT中编写插件,然后测试程序中的keyPressEvent函数不响应开发板上的按键。q求原因。
附上QT测试代码:

testplugin.h



#ifndef TESTPLUGIN_H
#define TESTPLUGIN_H

#include "ui_testplugin.h"

class CTestPlugin : public QDialog,public Ui_testplugin
{
Q_OBJECT
public:
CTestPlugin(QWidget* = 0);
//~CTestPlugin();
private:
virtual void keyPressEvent(QKeyEvent* k);
};

#endif // TESTPLUGIN_H



testplugin.cpp

#include <stdio.h>
#include <QtGui/QtGui>
#include "testplugin.h"

CTestPlugin::CTestPlugin(QWidget* parent) : QDialog(parent)
{
setupUi(this);
qDebug("Enter CTestPlugin() by zzf!");
//printf("Enter CTestPlugin()!\n");
}
void CTestPlugin::keyPressEvent(QKeyEvent *k)
{
if(k->key() == Qt::Key_1)
//printf("Key 1 tested!\n");
qDebug("Key 1 tested!\n");
else if(k->key() == Qt::Key_2)
//printf("Key 2 tested!\n");
qDebug("Key 2 tested!\n");
else
//printf("other keys tested!\n");
qDebug("other keys tested!\n");
}


main.cpp

#include <QtGui/QApplication>
#include <QtCore/QTextCodec>
#include "testplugin.h"

int main(int argc ,char* argv[])
{
QCoreApplication::addLibraryPath("/usr/lib/plugins");
QApplication app(argc, argv);
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

CTestPlugin plugin;
plugin.show();
return app.exec();
}
#Page# 2011-04-01
  • 打赏
  • 举报
回复
没人系统回答啊?我说说见解。
在linux驱动中使用report_key进行按键上报,这个内核源码很成熟,不多说。比如我们用tab,enter 2个按键,文件系统挂载后应该会有/dev/event0这样的设备节点。启动qt时应该设置键盘的环境变量qws_keyboard=xxx。
那么在qt中,如果要实现tab键功能,按理是自动实现了。因为你已经有了“键盘”,qt已经加载了键盘驱动,那么当你按‘tab’时,自然就是普通功能:当前控件的焦点跳到下一个控件。
如果你不希望按tab时焦点跳到下一个控件,那么你就需要installeventfilter一下,在父窗体把事件拦截掉即可。
不过,我现在还有个疑问,比如你的键盘模拟的是数字键1~9,qt做的按钮也有1~9,那么除了上面说的事件拦截,还有没有快捷办法,直接把键盘1~9绑定到对应的qt按钮1~9呢?QAction?
期待高人回答~~~
帅得不敢出门 2011-01-12
  • 打赏
  • 举报
回复
我的想法是这样的:
比如key1的值是0x01 ,你要实现成Qt::Key_0
那么注册个input事件,然后向操作系统传key 0x30 模拟成pc键盘的数字0键。
qt中还是在keyEventPress 中处理Qt::Key_0

车太靓 2011-01-12
  • 打赏
  • 举报
回复
谢谢各位关注,解决后再发贴
jiapper 2011-01-10
  • 打赏
  • 举报
回复
关注!!
求教楼主是如何解决的。!
qiangv 2011-01-10
  • 打赏
  • 举报
回复
不知道楼上说的对不对。

如果你在驱动中正确地处理了processkeyevent或processkeycode,QT自己会帮你转发消息的。

楼主先确认下你的问题所在吧。
heefan 2011-01-10
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 ydf5716065 的回复:]

不知道我理解的是否正确,我的想法是重写event函数,给你个例子:
C/C++ code

bool Main_Window::event( QEvent * e )
{
if(e->type () == QEvent::KeyPress){
QKeyEvent *ke=(QKeyEvent *)e;
if(ke->key() == Qt::Key_E……
[/Quote]
+1, 楼主是问键盘响应问题吧?!
我认为是overload键盘事件。
ydf5716065 2011-01-07
  • 打赏
  • 举报
回复
不知道我理解的是否正确,我的想法是重写event函数,给你个例子:

bool Main_Window::event( QEvent * e )
{
if(e->type () == QEvent::KeyPress){
QKeyEvent *ke=(QKeyEvent *)e;
if(ke->key() == Qt::Key_Enter){
return true;
}
return QWidget::event(e);
}
else
return QWidget::event(e);
}
加载更多回复(13)

16,816

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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