QT::QKeyEvent

http://blog.csdn.net/free_program_1314/article/details/7681456

在QMainWindow的工具栏上有一个QComboBox,我子类化QMainWindow为CMainWindow,现在想让工具栏上的combox响应回车,好像没用。
我的思路:先抓CMainWIndow的KeyPressEvent事件,判断按下的键是回车后,再判断当前的控件焦点是不是在工具栏的combox上。是的话就进行处理。

void CMainWindow::keyPressEvent(QKeyEvent* evn)
{
    if(evn->type() == QEvent::KeyPress)
    {
        QKeyEvent* e = static_cast<QKeyEvent*>(evn);
        if(e->key() == Qt::Key_Enter)
        {
            AlarmBox("Enter Key down");
                       //取焦点控件。是ComBox就调用回车处理函数,还没有实现。
        }
    }
}

判断条件错了,应该是if(event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return)但是调试发现,按回车时会先激发currentIndexChanged信号,处理完了keyPressEvent才激发。
如此看来,按Combox本身就接受回车事件。


QKeyEvent类参考

QKeyEvent类用于描述键盘按键所产生的QT事件
#include<QKeyEvent>
继承于QInpueEvent
公有函数:

QKeyEvent ( Type type, int key, Qt::KeyboardModifiers modifiers, const QString & text = QString(), bool autorep = false, ushort count = 1 )

            
int count () const
bool isAutoRepeat () const
int key () const
bool matches ( QKeySequence::StandardKey key ) const
Qt::KeyboardModifiers modifiers () const
quint32 nativeModifiers () const
quint32 nativeScanCode () const
quint32 nativeVirtualKey () const
QString text () const
相关的非成员函数:
bool operator== ( QKeyEvent * e, QKeySequence::StandardKey key )
bool operator== ( QKeySequence::StandardKey key, QKeyEvent * e )
细节描述:
QKeyEvent类用于描述键盘按键所产生的QT事件,当一个窗口具有输入焦点时,通过键盘的按键的(敲击/释放)所产生的QT键盘事件
可以传送给具有输入焦点的窗口进行处理。
键盘QT事件包含了一些指定的接收标志用于指出QT事件接受者是否对该事件进行处理,如果窗口不处理键盘的(敲击/释放)
可以通过调用ignore()函数予以忽略。键盘QT事件具有传递性,会传送给父窗口及顶层窗口所构成的链表,一层一层的传递,
直到某窗口调用accept()予以接受,或者过滤直至该事件被销毁。键盘QT事件对于多媒体在默认情况下总是被忽略的,
如果你的窗口要处理该事件,可以通过调用accept()函数予以接收。


可以通过调用QWidget::setEnable()函数设置某个窗口开启/禁止接收鼠标或键盘事件。
QT事件句柄函数 QWidget::keyPressEvent(), QWidget::keyReleaseEvent(), QGraphicsItem::keyPressEvent() 
, QGraphicsItem::keyReleaseEvent()可以用于接收键盘事件。


成员函数描述:

QKeyEvent::QKeyEvent ( Type type, int key, Qt::KeyboardModifiers modifiers, const QString & text = QString(), bool autorep = false, ushort count = 1 )

初始化一个keyEvent对象。
参数type必须是QEvent::KeyPress, QEvent::KeyRelease, or QEvent::ShortcutOverride其中之一。 
参数key用于监听QT::Key循环事件,如果key为0则导致键盘事件的是一个未定义按键,例如,导致该键盘事件的可能是
连续不断的按键下压操作或者是预定义的快捷键。  
参数modifiers用于指出键盘按键键值的改变,同时给出该按键对应的Unicode编码信息。
如果参数autorep为true,函数isAutoRepeat()函数就返回true
参数count用于计算该键盘事件所牵扯到得按键的个数。


int QKeyEvent::count () const
返回键盘QT事件所牵扯到的按键的数量,如果函数text()返回不为空,则本函数只是简单的计算该文本字符串的长度。


bool QKeyEvent::isAutoRepeat () const
如果该键盘QT事件时由于一些列的自动重复的按键导致的则返回true,否则返回false
注意,如果导致多次叠加的按键组合其中一部分是自动循环形式产生的,则该函数不确定是返回true还是false。


int QKeyEvent::key () const
返回按键被下压或释放时对应的编码值。查看Qt::Key键盘编码清单,这些编码信息都是依赖于底层操作系统的。
该函数不区分大小写,要想知道返回的按键编码所对应的按键是大写还是小写(比如A和a)可以通过调用text()函数得到。  
数字0和Qt::Key_unknown代表导致QT键盘事件的不是一个well_known按键所产生的,例如,导致该键盘事件的可能是一系列复杂的输入,或者是快捷键,或者是被压缩的按键所导致的。

bool QKeyEvent::matches ( QKeySequence::StandardKey key ) const
如果导致键盘QT事件的按键编码值和参数key所给出的标准按键值匹配则返回true,否则返回false.
该函数在QT4.2中有介绍。该函数可以通过迭代方式得知当前按下的是哪一个按键。


Qt::KeyboardModifiers QKeyEvent::modifiers () const
键盘QT事件生成后直接返回导致该事件的热键。提示:该函数并不总是返回很确切的结果,当用户同时按下shift+组合键或者
释放其中某一个键时,该函数就可能返回一个让用户迷惑的结果。


quint32 QKeyEvent::nativeModifiers () const
返回导致键盘QT事件的热键编码值,如果该事件不包含所对应的热键则返回数字0.
附注:即便键盘事件包含扩展信息,该热键也可能是为0的。
该函数在QT4.2中有介绍。


quint32 QKeyEvent::nativeScanCode () const
返回导致该键盘QT事件的扫描码,如果敢事件不包含所对应的扫描码则返回数字0.
附注:即便键盘事件包含扩展信息,该扫描码也可能是为0的。
附注:在Mac OS/X 系统上该函数式无效的,因为没有办法从Cocoa或者Carbon中获取扫描码,该函数通常返回1,或者当包含扩展信息时返回0.
该函数在QT4.2中有介绍


quint32 QKeyEvent::nativeVirtualKey () const
返回导致键盘QT事件的虚拟键或者字符码,如果该键盘事件没有包含该按键的编码则返回0.
附注:即便键盘事件包含扩展信息,该虚拟键也可能是为0的。 
该函数在QT4.2中有介绍


QString QKeyEvent::text () const
返回导致的键盘事件的Unicode字符编码信息,当导致键盘事件的原因是由热键比如Shift, Control, Alt等的下压或者释放,
则该函数返回的字符可以为空值。在这种情况下函数key()可以返回一个有效值。


相关的非成员函数:
bool operator== ( QKeyEvent * e, QKeySequence::StandardKey key )
如果参数e和参数key类型匹配且相等则返回true
等同于函数 e->matches(key).


bool operator== ( QKeySequence::StandardKey key, QKeyEvent * e )
如果参数e和参数key类型匹配且相等则返回true
等同于函数 e->matches(key).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值