嵌入式培训机构四个月实训课程笔记(完整版)-C++和QT编程第五天-Qt 键盘(物联技术666)

链接:https://pan.baidu.com/s/1Rq8PQRV1liuIXML0JKOX_Q?pwd=1688
提取码:1688

focus

一个拥有焦点(focus)QWidget才可以接受键盘事件。有输入焦点的窗口是活动窗口或活动窗口子窗口或子子窗口等。

焦点移动的方式有以下几种:

按下TabShift+Tab

注意:文本编译器(一般需要插入Tab),或者WebView(需要Tab来移动超链接焦点)

Qt中,需要输入Tab的地方可以用 Ctrl+Tab Ctrl+Shift+Tab 替代。

点击一个QWidget

建议:只对接受文本输入的Widget启用该功能

按下键盘的快捷键

QLabel::setBuddy(), QGroupBox,以及 QTabBar 支持

使用鼠标滚轮

用户移动焦点

程序将决定被设置focusWidget的哪一个子Widget获得焦点

注意:如果一个 Widget 已经 grabKeyboard,所有键盘事件将发送到该Widget而不是获得焦点的Widget

focusPolicy

一个QWidget获得焦点的方式受 focusPolicy 控制

Qt::TabFocus

通过Tab键获得焦点

Qt::ClickFocus

通过被单击获得焦点

Qt::StrongFocus

可通过上面两种方式获得焦点

Qt::NoFocus

不能通过上两种方式获得焦点(默认值),setFocus仍可使其获得焦点

keypresskeyrelease

首先,我们要是Widget获得焦点,一般设置focusPolicy

然后要对按键进行响应,我们只需要直接重载:

keyPressEvent

keyReleaseEvent

注意:

对我们不处理的事件,要调用父类的相应事件处理函数。

如果widget当前没有焦点,考虑到事件转发:如果其子widget有焦点,那么该widget未处理的键盘事件将被转发过来。

有时输入焦点不在任何窗口中。这种情况发生在所有程序都是最小化的时候。这时,Windows将继续向活动窗口发送键盘消息,但是这些消息与发送给非最小化的活动窗口的键盘消息有不同的形式。

QKeyEvent

windows下,与键盘事件有关的有8个消息:

对产生可显示字符的按键组合,Windows不仅给程序发送按键消息,而且还发送字符消息

有些键不产生字符,这些键包括shift键、功能键、光标移动键和特殊字符键如InsertDelete。对于这些键,Windows只产生按键消息。

这些消息在Qt中只体现在QKeyEvent中。

对字符,可通过 QKeyEvent::text() 获得

其他键,QKeyEvent::key() 获得一个键值

event函数

由于 Tab 键被用来切换焦点,这使得它与众不同。

这是qwidget.cppevent函数中的代码片段:

case QEvent::KeyPress:

{  

    QKeyEvent *k = (QKeyEvent *)event;  

    bool res = false;

    if (!(k->modifiers() & (Qt::ControlModifier | Qt::AltModifier)))

   {  //### Add MetaModifier?

       if (k->key() == Qt::Key_Backtab || (k->key() == Qt::Key_Tab && (k->modifiers() & Qt::ShiftModifier)))

           res = focusNextPrevChild(false);

       else if (k->key() == Qt::Key_Tab)

           res = focusNextPrevChild(true);

      if (res)

          break;

   }

   keyPressEvent(k);

}

如果我们需要处理Tab键,需要重载 event 函数。

你可能感兴趣的:(嵌入式培训笔记,笔记,c++,qt,开发语言)