一个小程序,让你知道Qt一次能支持按下多少个键(一)
来源:互联网 发布:c#和c语言的区别 编辑:程序博客网 时间:2024/05/02 00:55
一个小程序,让你知道Qt一次能支持按下多少个键(一)
写这一篇日志的目的在于将Qt按键事件系统进行二次封装,制作出符合游戏要求的按键处理,我们知道有时候游戏需要响应多个按键的,这个小程序就是我朝着这方面目标的一个小小的尝试。
源代码的下载地址:这里
首先是Widget.h头文件,它是窗口类的声明。
#ifndef WIDGET_H#define WIDGET_H#include <QString>#include <QList>#include <QWidget>/*---------------------------------------------------------------------------*/class Widget: public QWidget{ Q_OBJECTpublic: Widget( void ); ~Widget( void );protected: void paintEvent( QPaintEvent* pEvent ); void keyPressEvent( QKeyEvent* pEvent ); void keyReleaseEvent( QKeyEvent* pEvent );private: void SetShowText( void ); QString m_Text; QString m_ShowText; QList<int> m_KeyPressedList;};/*---------------------------------------------------------------------------*/#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 += key; m_ShowText += '\n'; }}在按键按下时,我们在QList中添加这个按键,在按键弹出时,我们搜索出该键,并由QList<T>::erase方法予以删除。
以下是程序的演示效果:
我发现同时按下1和2,那么3以后的按键都不能按了,同时按下2和3,那么1和5不能再按下去,但是6键可以按下去。这是怎么一回事呢?我也希望有高人能够指点指点。不过我们可以通过这个程序,知道Qt应用程序一次性最多支持多少个键按下。
- 一个小程序,让你知道Qt一次能支持按下多少个键(一)
- 一个小程序,让你知道Qt一次能支持按下多少个键(二)
- 一个能让女孩流泪的答案,你知道吗
- 多少个你不知道
- Android传感器汇总让你知道你的手机支持多少种传感器设备
- 你能知道结果是多少么
- 一个能让你感动的小故事
- Sql语句你知道多少(一)------select语句
- iOS面试题,看看你究竟知道多少(一)
- S5PV210开发 -- I2C 你知道多少?(一)
- 一个小程序,你知道EOF的值是多少吗?
- 一分钟让你的程序支持队列和并发
- 知道这20个正则表达式,能让你少写1,000行代码
- 知道这20个正则表达式,能让你少写1,000行代码
- 知道这20个正则表达式,能让你少写1,000行代码
- 知道这20个正则表达式,能让你少写1,000行代码
- 知道这20个正则表达式,能让你少写1,000行代码
- 知道这20个正则表达式,能让你少写1,000行代码
- 冒泡排序
- 再见了
- 迅速在文件中替换某字符
- PL/SQL函数instr浅解
- C++和Java运算符优先级表
- 一个小程序,让你知道Qt一次能支持按下多少个键(一)
- cocos2d-x.2.0 人物动画帧实现
- C语言---排序算法-------直接插入排序(一)
- 最大权闭合图 zoj2930
- 杂题专项:UVa 10382
- 最佳软件开发实践指导
- linux shell数据重定向(输入重定向与输出重定向)详细分析
- HDOJ 1005
- 数学专项counting:LA 5846