一个小程序,让你知道Qt一次能支持按下多少个键 - 推酷
一个小程序,让你知道Qt一次能支持按下多少个键
一个小程序,让你知道Qt一次能支持按下多少个键
写这一篇日志的目的在于将Qt按键事件系统进行二次封装,制作出符合游戏要求的按键处理,我们知道有时候游戏需要响应多个按键的,这个小程序就是我朝着这方面目标的一个小小的尝试。
源代码的下载地址:
首先是Widget.h头文件,它是窗口类的声明。
#ifndef WIDGET_H
#define WIDGET_H
#include &QString&
#include &QList&
#include &QWidget&
/*---------------------------------------------------------------------------*/
class Widget: public QWidget
Widget( void );
~Widget( void );
protected:
void paintEvent( QPaintEvent* pEvent );
void keyPressEvent( QKeyEvent* pEvent );
void keyReleaseEvent( QKeyEvent* pEvent );
void SetShowText( void );
QList&int&
m_KeyPressedL
/*---------------------------------------------------------------------------*/
#endif // WIDGET_H
这里处理了按键按下事件和按键弹出事件,以及绘制事件。之所以要重新实现绘制事件,是因为需要对文字进行更新,以便我们对按键处理情况有一个实时的了解。
注意我们使用了一个QList来对已经按下的按键进行保存。也就是说,这个数据是我们获知Qt一次能支持按下多少个键的关键。
下面是Widget.cpp的内容。
#include &QPoint&
#include &QtAlgorithms&
#include &QKeyEvent&
#include &QPainter&
#include &Widget.h&
Widget::Widget( void ): QWidget( 0 )
// 设置窗口的一些属性
setFixedSize( 640, 360 );
setWindowTitle( tr( &KeyTest& ) );
// 设置文字
m_Text = tr( &Try to press key.\n& );
m_KeyPressedList.clear( );
/*---------------------------------------------------------------------------*/
Widget::~Widget( void )
/*---------------------------------------------------------------------------*/
void Widget::paintEvent( QPaintEvent* pEvent )
Q_UNUSED( pEvent );
QPainter painter( this );
painter.drawText( QPoint( 32, 32 ), m_Text );
painter.drawText( QPoint( 32, 64 ), m_ShowText );
/*---------------------------------------------------------------------------*/
void Widget::keyPressEvent( QKeyEvent* pEvent )
m_KeyPressedList.append( pEvent-&key( ) );
m_Text = tr( &The key %1 pressed.& ).arg( pEvent-&key( ) );
SetShowText( );
update( );
/*---------------------------------------------------------------------------*/
void Widget::keyReleaseEvent( QKeyEvent* pEvent )
m_KeyPressedList.erase( qFind( m_KeyPressedList.begin( ),
m_KeyPressedList.end( ), pEvent-&key( ) ) );
m_Text = tr( &The key %1 released.& ).arg( pEvent-&key( ) );
SetShowText( );
update( );
/*---------------------------------------------------------------------------*/
void Widget::SetShowText( void )
m_ShowText = tr( &Pressed Keys: & );
foreach ( int key, m_KeyPressedList )
m_ShowText +=
m_ShowText += '\n';
在按键按下时,我们在QList中添加这个按键,在按键弹出时,我们搜索出该键,并由QList&T&::erase方法予以删除。
以下是程序的演示效果:
我发现同时按下1和2,那么3以后的按键都不能按了,同时按下2和3,那么1和5不能再按下去,但是6键可以按下去。这是怎么一回事呢?我也希望有高人能够指点指点。不过我们可以通过这个程序,知道Qt应用程序一次性最多支持多少个键按下。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致查看: 228|回复: 3
注册时间最后登录阅读权限10积分9精华0帖子
一鸣惊人, 积分 9, 距离下一级还需 91 积分
Y460笔记本&&QQ talk 按键发言说不了话,但是自由发言却可以说话还有就是经常性的进入QQtalk的时候是自由发言,然后我去玩游戏了玩着玩着QQtalk不知道怎么的就自动变成自由发言了,游戏期间是完全是全屏的,完全没有切换出来过桌面,但是经常地QT就无缘无故把我弄成了自由发言,好烦好烦以上问题我卸载了QT重新***过之后又可以恢复正常使用,但是过一两天又反复变成那些问题了,重装了系统,卸载重装了QT.都无法解决那问题啊,同一型号的机器 我朋友的却没有这个问题,搞不懂啊,求各位大大帮帮我吧,有时候玩着玩着游戏突然听到朋友机器那边有我说话的回音,切换出去一看,QT不知道什么时候又变成自动发言了,这已经严重印象到我QT的使用了.拜托各位了问题补充:
还有就是经常性的进入QQtalk的时候是按键发言,然后我去玩游戏了玩着玩着QQtalk不知道怎么的就自动变成自由发言了,打错了是登陆QT的时候是按键发言 然后去玩游戏之后一会就自动帮我转换成自由发言了.
我的QT房间号是& &666044&&。玩的游戏是穿越火线。
注册时间最后登录阅读权限10积分9精华0帖子
一鸣惊人, 积分 9, 距离下一级还需 91 积分
???????????????????????
注册时间最后登录阅读权限20积分646精华0帖子
出口成章, 积分 646, 距离下一级还需 354 积分
&&没遇到过这种情况~ 等官方解答吧~
QT挂机小窝:518844
注册时间最后登录阅读权限60积分9553精华0帖子
宛转悠扬, 积分 9553, 距离下一级还需 2447 积分
这种问题,也只能官方解答咯。
让爱一起行动
2012年论坛七夕专属活动勋章
劳动节勋章
论坛劳动节活动专属勋章
QT爱好者勋章
QT个人积分超过1000分,论坛积分超过2000分的达人们
情人节勋章
论坛情人节专属活动勋章
论坛一周年纪念勋章
论坛开放1周年绝版纪念勋章,仅限于活动
圣诞节勋章
2012年论坛圣诞节活动专属绝版勋章
愚人节勋章
2013年愚人节活动专属绝版勋章
元宵节勋章
2013年元宵节活动专属绝版勋章
十二生肖之蛇
十二生肖中最机敏最懒惰的生肖
纯真的白羊座
十二星座最纯真的星座
勇敢的射手座
十二星座最勇敢的星座
温柔的双鱼座
十二星座最温柔的星座
Powered by匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。