浅谈QT中Tab键的切换逻辑

浅谈QT中Tab键的切换逻辑

无意中发现在输入界面中按下Tab键时,没有按照预想的顺序切换焦点事件,如下图所示

这个现象还是很有趣,仔细观察了下,默认的切换顺序是按照控件拖入顺序,那么知道了这个问题想要解决起来就很简单了,完全可以通过顺序摆放控件就可以实现按照指定的顺序切换。

但是此方法又略显低级,是否还有其他解决方法?倒腾后发现,添加上布局后,原来无序的切换就变得有序了

  • 表格布局

    效果
  • 水平布局

    效果
  • 垂直布局

    效果

    如果加上label和按钮或者其他可以编辑的控件,会是什么效果有兴趣的可以试试,这里就不在演示了。

在Qt早版本中,5.11之前,可能不能通过布局解决Tab键的切换顺序,或者说界面布局已经完成了,这时候该怎么设置焦点的切换顺序。

在官方文档中有一个函数可以设置焦点的切换顺序setTabOrder,官方解释如下。

cpp 复制代码
[static] void QWidget::setTabOrder(QWidget *first, QWidget *second)
Puts the second widget after the first widget in the focus order.
It effectively removes the second widget from its focus chain and inserts it after the first widget.
Note that since the tab order of the second widget is changed, you should order a chain like this:
/*
按焦点顺序将第二个小部件放在第一个小部件之后。
它有效地从焦点链中删除第二个小部件,并将其插入到第一个小部件之后。
注意,由于第二个小部件的选项卡顺序发生了变化,您应该像这样订购一个链:
*/
 setTabOrder(a, b); // a to b
 setTabOrder(b, c); // a to b to c
 setTabOrder(c, d); // a to b to c to d
not like this:
 // WRONG
 setTabOrder(c, d); // c to d
 setTabOrder(a, b); // a to b AND c to d
 setTabOrder(b, c); // a to b to c, but not c to d
相关推荐
程与留1 小时前
15_国际化和本地化:tr()、ts 文件、QM 文件、多语言切换
c++·qt
程与留2 小时前
14_Qt 样式表(QSS)入门(语法、选择器、美化实战)
c++·qt
Quz9 小时前
QML 拖拽篇:接收拖拽与数据交换
qt
张人玉1 天前
基于 Python 机器学习 与 PyQt5 桌面框架开发的可视化分析系统——基于大数据的网上购物消费行为分析可视化大屏
python·qt·机器学习·echarts·three.js
「QT(C++)开发工程师」1 天前
C++11 std::unique_ptr — 独占所有权的智能指针
c语言·开发语言·c++·qt
小镇敲码人1 天前
【深入浅出】之Qt 事件系统实战:鼠标、键盘、滚轮、窗口与定时器事件
数据库·qt·网络协议·mysql·http
小小龙学IT1 天前
Qt 数据库编程(Qt SQL 模块)深度解析
数据库·sql·qt
Qt历险记1 天前
C++11 std::unique_ptr — 独占所有权的智能指针
qt
宏笋1 天前
一款集结古今中外文学查阅与编辑的软件
qt
机器视觉知识推荐、就业指导2 天前
为什么老说“纯 Qt 没啥就业市场”?
开发语言·qt