文章目录
1.概述
QKeyEvent 类用来描述一个键盘事件。当键盘按键被按下或者被释放时,键盘事件便会被发送给拥有键盘输人焦点的部件。
QKeyEvent 的 key() 函数可以获取具体的按键,对于 Qt 中给定的所有按键,可以在帮助中查看 Qt: :Key 关键字。需要特别说明的是,回车键在这里是 Qt::Key_Return;键盘上的一些修饰键,比如 Ctrl 和 Shift 等, 这里需要使用 QKeyEvent 的 modifiers() 函数来获取,可以在帮助中使用 Qt:: KeyboardModifier 关键字来査看所有的修饰键。
widget下常用两个虚函数:
cpp
virtual void keyPressEvent(QKeyEvent* e); //键盘按下事件
virtual void keyReleaseEvent(QKeyEvent* e); //键盘松开事件
重载这两个虚函数就能响应键盘消息。
2.焦点
输入的按键字符一定会有响应对象,控制响应对象的就是对象的焦点属性,简单来说,拥有焦点的对象接受键盘消息,Qt Widget中与焦点有关的两个事件如下所示:
cpp
void focusInEvent(QFocusEvent* event); //焦点进入事件
void focusOutEvent(QFocusEvent* event); //失去焦点事件
与焦点控制有关的两个函数:
cpp
void setFocusPolicy(Qt::FocusPolicy policy);//获取焦点政策
void setFocus(Qt::FocusReason reason); //当前控件拥有焦点
inline void setFocus() { setFocus(Qt::OtherFocusReason); }
获得焦点的办法:
FocusPolicy::ClickFocus | 表示鼠标点击小部件时会获得焦点 |
---|---|
FocusPolicy::TabFocus | 表示可通过Tab键切换可获得焦点 |
FocusPolicy::WheelFocus | 表示可通过鼠标滚轮切换获得焦点 |
FocusPolicy::StrongFocus | 表示可通过鼠标滚轮点击切换获得焦点 |
FocusPolicy::NoFocus | 不可获得焦点(默认设置) |
3.强制获取键盘消息
这个小组件接收所有的键盘事件,直到调用releaseKeyboard();其他小组件完全没有得到键盘事件。Qt设置的键盘快捷键不受影响。
cpp
void grabKeyboard();
void releaseKeyboard();
有时候,widget获取不了键盘事件,可以采用这两个函数加强,放在在聚焦函数中获取,失去焦点时释放。
4.键盘常用组合方法
cpp
// 键盘按下事件
void Widget::keyPressEvent(QKeyEvent * event)
{
// 普通键
switch (event->key())
{
// ESC键
case Qt::Key_Escape:
qDebug() <<"ESC";
break;
// 回车键
case Qt::Key_Return:
qDebug() <<"Enter";
break;
// F1键
case Qt::Key_F1:
qDebug() <<"F1";
break;
}
// 两键组合
if(event->modifiers() == Qt::ControlModifier) { // 如果按下了CTRL键
if(event->key() == Qt::Key_M){
qDebug()<<"CTRL + M";
}
}
if(event->modifiers() == Qt::AltModifier) { // 如果按下了ALT键
if(event->key() == Qt::Key_M)
qDebug()<<"ALT + M";
}
if(event->modifiers() == Qt::ShiftModifier){ // 如果按下了Shift键
if(event->key() == Qt::Key_M)
qDebug()<<"Shift + M";
}
// 三键组合Shift + Ctrl + A的实现
if (event->modifiers() == (Qt::ShiftModifier | Qt::ControlModifier) && event->key() == Qt::Key_A) {
qDebug() << "CTRL + Shift + A";
}
}
// 键盘释放事件
void Widget::keyReleaseEvent(QKeyEvent *event)
{
// 方向UP键
if(event->key() == Qt::Key_Up)
{
qDebug() << "release: "<< "up";
}
}
5.总结
键盘的输入,是系统信息输入关键,还有其它要点,项目涉及时再总结更新。