Qt获取组合键(键盘按住某键,鼠标组合实现)
来源:互联网 发布:linux内存监控脚本 编辑:程序博客网 时间:2024/04/29 11:18
Qt获取组合键(键盘按住某键,鼠标组合实现)
原味地址:http://www.cnblogs.com/codingmylife/archive/2010/08/30/1812739.html
CTRL+Enter发送信息的实现
在现在的即时聊天程序中,一般都设置有快捷键来实现一些常用的功能,类似QQ可以用CTRL+Enter来实现信息的发送。
在QT4中,所有的事件都继承与QEvent这个类,以下是用QEvent来实现快捷键的功能。
首先所有QT类的基类QObject有一个成员函数installEventFilter,这个函数是用来将一个事件处理器和该QObject绑定起来,所以就有了我下面的想法。
首先在chat类定义一个eventFilter,该函数是一个虚函数,可以由子类进行更改。所以声明eventFilter如下:
virtual bool eventFilter(QObject *obj, QEvent *e);
看了下QT文档对于这个函数的声明的解释,大概意思就是如果你要过滤某个事件就返回false,如果要使用某个事件就返回true。
我想在这个函数中加入对Enter键和Ctrl+Enter组合键的判断,具体查看QKeyEvent类的文档
QKeyEvent类中有函数key和modifier,key函数返回的是发生时间的按键值,modifier返回的而是修饰键,QT所支持的修饰键如下:
Constant Value Description
Qt::NoModifier 0x00000000 No modifier key is pressed.
Qt::ShiftModifier 0x02000000 A Shift key on the keyboard is pressed.
Qt::ControlModifier 0x04000000 A Ctrl key on the keyboard is pressed.
Qt::AltModifier 0x08000000 An Alt key on the keyboard is pressed.
Qt::MetaModifier 0x10000000 A Meta key on the keyboard is pressed.
Qt::KeypadModifier 0x20000000 A keypad button is pressed.
Qt::GroupSwitchModifier 0x40000000 X11 only. A Mode_switch key on the keyboard is pressed.
所以可以重写eventFilter函数来实现快捷键的功能,可以根据QKeyEvent的key和modifire来分别是Enter还是Ctrl+enter被按下。
重写eventFilter的函数如下:
bool Window::eventFilter(QObject *obj, QEvent *e){Q_ASSERT(obj == ui.inputMsgEdit);if (e->type() == QEvent::KeyPress){QKeyEvent *event = static_cast(e);if (event->key() == Qt::Key_Return && (event->modifiers() & Qt::ControlModifier)){sendMessage();return true;}}return false;}
然后把这个过滤器用installEventFilter函数安装在聊天窗口的输入框上(QTextEdit),这样就实现快捷键的功能了。
三键组合Shift + Ctrl + A的实现
只要在窗体中相应keyPressEvent事件函数即可。
void Window::keyPressEvent(QKeyEvent *e){if (e->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier) && e->key() == Qt::Key_A){//pressed}}
键盘按住Ctrl键 + 鼠标左键的实现
在窗体中相应mousePressEvent事件函数在其中检测Ctrl键是否按住即可。
void Window::mousePressEvent(QMouseEvent *e){// 获取鼠标在点击窗体上的坐标QPoint pos = e->pos();if (e->button() == LeftButton){if ( QApplication::keyboardModifiers () == Qt::ControlModifier){//pressed}}}
- Qt获取组合键(键盘按住某键,鼠标组合实现)
- Qt组合键(键盘与鼠标的组合)
- Qt获取组合键
- Qt获取组合键
- QT获取组合键
- Qt获取组合键
- Qt获取组合键
- Qt模拟键盘按键与组合键
- Qt键盘事件--组合键响应方法
- Qt模拟键盘按键与组合键
- Qt之 捕获键盘的组合键
- Qt 组合键的实现
- WPF获取键盘状态(如WPF组合键)
- JS实现键盘监听(包括组合键)
- JS实现键盘监听(包括组合键)
- JS实现键盘监听(包括组合键)
- C#键盘组合键
- 键盘组合键用法
- 并查集 BZOJ 1015 1015: [JSOI2008]星球大战starwar
- java生成word,html文件并将内容保存至数据库 (http://blog.163.com/whs3727@126/blog/static/729915772007325112014115/)
- 在matlab中生成m序列
- HTML怎样获取屏幕尺寸
- CDOJ-Training for Data Structures 之K - 方师傅与栈
- Qt获取组合键(键盘按住某键,鼠标组合实现)
- 懂得坚持,胜利就不远了
- IDS/IPS测试工具inundator使用方法
- jsp页面年份下拉框生成当前年的前十年和后十年
- 【Codeforces】【Coder-Strike 2014 - Finals】【D Bug in Code】
- 类大脑计算机,一个可以适应并从经验中学习的计算机
- 04 RFS自动化之【运算符与函数】
- 资本运作的基本规律
- 库函数