从keyPressEvent按键事件中获取QKeySequence
2016-03-16 14:30
399 查看
转自:http://www.tuicool.com/articles/UnAVbyj
【提前话】:这几天开始着手QT方面的学习了,国庆后差不多就要转战新平台了,公司的所有产品也将由Net转到QT了,对自己来说失去了一些,也得到了一些。
QKeySequence多用于快捷键,获取QKeySequence可以同按键事件的QKeyEvent获取,例如:
如果在你的widget中已经设置了某个快捷键的话,例如Ctrl+E , 那么当你按下相应的快捷键组合(Ctrl+E)时候,我们会发现在KeyPressEvent中无法获取到该快捷键的QKeySequence,针对这种问题,很多人想到的处理方法就是添加EventFilte(事件过滤)来处理,其实最好的方法就是直接拦截QApplication::notify,因为事件的派发最后都是有QApplication::notify来派发到指定的对象的,所以notify是所有事件的”第一道门岗“,如果要对事件做一些全局过滤处理,那么QApplication::notify无疑是你最好的选择了(不推荐给QApplication安装eventfilte,除非用于调试目的),当然如果希望局部过滤或者一个对象监听另一个对象的事件,那么evntFilte(事件过滤器)是你最佳的选择了.
【提前话】:这几天开始着手QT方面的学习了,国庆后差不多就要转战新平台了,公司的所有产品也将由Net转到QT了,对自己来说失去了一些,也得到了一些。
QKeySequence多用于快捷键,获取QKeySequence可以同按键事件的QKeyEvent获取,例如:
class Mywidget : public QWidget { Q_OBJECT public: explicit Mywidget(QWidget *parent = 0); //省略无关代码 public: void keyPressEvent(QKeyEvent *keyevent); };
/* * Mywidget::keyPressEvent 按下键盘事件 * * created 2013.09.12 ,andy * */ void Mywidget::keyPressEvent(QKeyEvent *keyevent) { int uKey = keyevent->key(); Qt::Key key = static_cast<Qt::Key>(uKey); if(key == Qt::Key_unknown) { //nothing {unknown key} } if(key == Qt::Key_Control || key == Qt::Key_Shift || key == Qt::Key_Alt ) { return ; } //获取修饰键(Ctrl,Alt,Shift)的状态 Qt::KeyboardModifiers modifiers = keyevent->modifiers(); //判断某个修饰键是否被按下 if(modifiers & Qt::ShiftModifier) uKey += Qt::SHIFT; if(modifiers & Qt::ControlModifier) uKey += Qt::CTRL; if(modifiers & Qt::AltModifier) uKey += Qt::ALT; //popup information QMessageBox::information(this,"msg", QKeySequence(uKey).toString(QKeySequence::NativeText) ,QMessageBox::Ok); }【PPS】 :
如果在你的widget中已经设置了某个快捷键的话,例如Ctrl+E , 那么当你按下相应的快捷键组合(Ctrl+E)时候,我们会发现在KeyPressEvent中无法获取到该快捷键的QKeySequence,针对这种问题,很多人想到的处理方法就是添加EventFilte(事件过滤)来处理,其实最好的方法就是直接拦截QApplication::notify,因为事件的派发最后都是有QApplication::notify来派发到指定的对象的,所以notify是所有事件的”第一道门岗“,如果要对事件做一些全局过滤处理,那么QApplication::notify无疑是你最好的选择了(不推荐给QApplication安装eventfilte,除非用于调试目的),当然如果希望局部过滤或者一个对象监听另一个对象的事件,那么evntFilte(事件过滤器)是你最佳的选择了.
相关文章推荐
- iOS开发中使用UIScrollView实现无限循环的图片浏览器
- mysql中key 、primary key 、unique key 与index区别
- UITableViewCell滑动删除及移动
- Swfit UITableView的使用(六)
- UICollectionView Section 纯代码代码控制 HeaderView和FooterView的显示,uicollectionview
- StringBuilder和String的区别
- Activity.runOnUiThread(Runnable)简单介绍
- uva 11195 Another queen (用状态压缩解决N后问题)
- php中使用$_REQUEST需要注意的一个问题
- Django View Request和Response
- iOS之UIScrollview添加约束图文详解
- 225. Implement Stack using Queues
- cocoa touch框架UIkit学习
- iOS SDK蓝牙4.0相关的组件为CoreBluetooth,官方文档翻译
- Android中线程间通信原理分析:Looper,MessageQueue,Handler
- Android中线程间通信原理分析:Looper,MessageQueue,Handler
- 30. UITableViewDelegate详解
- 调用 request.getParameter 之后再调用 request.getInputStream 取不到流数据
- iOS开发-UIScrollView详解
- request.getAttribute() 和 request.getParameter() 有何区别?