Qt之Tab键切换焦点顺序

简介

Qt的窗口部件按用户的习惯来处理键盘焦点。也就是说,其出发点是用户的焦点能定向到任何一个窗口,或者窗口中任何一个部件。

焦点获取方式比较多,例如:鼠标点击、Tab键切换、快捷键、鼠标滚轮等。

习惯性的,我们经常会使用Tab键来控制焦点顺序,比如:用户注册时,个人信息输入框焦点的切换、执行按钮焦点的切换等。

  • 简介
  • 效果
  • 实现方式
  • 源码

效果

实现方式

接口说明:

static void QWidget::setTabOrder(QWidget * first, QWidget * second)

Puts the second widget after the first widget in the focus order.

也就是说,按下Tan键后,焦点会从第一个控件切换到第二个控件。

注意,如果第二个控件Tab顺序改变,则应该这样设置一个顺序链:

//设置a、b、c、d顺序
setTabOrder(a, b);  //a->b
setTabOrder(b, c);  //a->b->c
setTabOrder(c, d);  //a->b->c->d

而不是这样:

//错误
setTabOrder(c, d);  // c->d
setTabOrder(a, b);  // a->b 和 c->d
setTabOrder(b, c);  // a->b->c, 但不是c->d

源码

这里以三个按钮如三个输入框为例,来说明Tab的顺序。

设置获取焦点时的样式,以便我们更清楚的观看效果。

QPushButton *pButton1 = new QPushButton(this);
QPushButton *pButton2 = new QPushButton(this);
QPushButton *pButton3 = new QPushButton(this);

QLineEdit *pLineEdit1 = new QLineEdit(this);
QLineEdit *pLineEdit2 = new QLineEdit(this);
QLineEdit *pLineEdit3 = new QLineEdit(this);

pButton1->setText("1");
pButton2->setText("3");
pButton3->setText("5");

pLineEdit1->setText("6");
pLineEdit2->setText("4");
pLineEdit3->setText("2");

pButton1->setStyleSheet("QPushButton:focus{border:none; background: green; color: white;}");
pButton2->setStyleSheet("QPushButton:focus{border:none; background: green; color: white;}");
pButton3->setStyleSheet("QPushButton:focus{border:none; background: green; color: white;}");

pLineEdit1->setStyleSheet("QLineEdit:focus{border:2px solid green;}");
pLineEdit2->setStyleSheet("QLineEdit:focus{border:2px solid green;}");
pLineEdit3->setStyleSheet("QLineEdit:focus{border:2px solid green;}");

QWidget::setTabOrder(pButton1, pLineEdit3);
QWidget::setTabOrder(pLineEdit3, pButton2);
QWidget::setTabOrder(pButton2, pLineEdit2);
QWidget::setTabOrder(pLineEdit2, pButton3);
QWidget::setTabOrder(pButton3, pLineEdit1);

就这样,简简单单的一个接口解决了我们的问题。有兴趣的小伙伴可以看下focusNextChild

时间: 2024-08-18 04:34:26

Qt之Tab键切换焦点顺序的相关文章

Silverlight:用Enter键替换Tab键切换焦点

业务系统中,很多录入人员习惯于用Enter键来代替Tab键切换控件焦点(虽然我个人并不觉得这样录入速度会变得有多高效,呵呵),有需求了,自然就得想办法满足. 思路:为了更灵活的控件焦点顺序,我决定用TabIndex来做文章,每个输入控件按下回车时,找到下一个比当前控件TabIndex更大且最接近的控件,然后focus(). XAML界面部分: <UserControl x:Class="tab_key_test.MainPage" xmlns="http://schem

修复duilib CEditUI控件和CWebBrowserUI控件中按Tab键无法切换焦点的bug

转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/41556615         在duilib中,按tab键会让焦点在Button一类的控件中切换,但是切换焦点一直存在bug,具体的描述如下:         1.在主窗体里弹出新的窗体,当新窗体中存在CEditUI控件并且焦点在此CEditUI控件上,那么按tab键将无法切换焦点而一直处于CEditUI中.(只在新窗体中有此bug,主创体中没有,原因会在后面分析)  

用Enter键控制焦点切换的方法

在Windows环境下,要使一个控件取得焦点,可在该控件上用鼠标单击一下,或按Tab键将焦点移至该控件上.这种控制焦点切换的方法有时不符合用户的习惯.用户希望用Enter键,控制焦点由Edit1切换到Edit2.要实现这样的功能需借助WinAPI函数SendMessage来完成.方法是:先设Form1的KeyPreview属性为true,然后在Form1的OnKeyPress事件中加入如下的代码.这样,用户就可以通过按Enter,键控制焦点按定义好的Taborder顺序来移动了! void __

mfc-MFC、dll库中的对话框,无法用Tab键控件之间切换

问题描述 MFC.dll库中的对话框,无法用Tab键控件之间切换 在控件风格中已经加了tab相关的风格,控件属性Tabstop也改成了true,也Ctrl+D设置了控件响应tab键的顺序,可是按tab键就是不切换,同时上下键和回车键也没用,求大神解答

表单的焦点顺序tabindex和对应enter键提交_基础知识

表单的焦点tab键顺序:tabindex决定,如果值缺省,择按顺序 用户:<input name="Text1" type="text" tabindex="1" /> 密码:<input name="Password1" type="password" tabindex="2" >对应onsubmit事件即可: 复制代码 代码如下: <form actio

激活对话框中 tab 键蓝色按钮切换

  不知大家在使用 Mac OS 时有没有一种困惑,在对话框出现后无法用 tab 切换选项.以至于很多人觉得 Mac 连这种蛋疼却实用的小功能都没有,其实不然,我们来设置一下就可以了. 场景重现: 如果不用鼠标或者触摸板你按回车只能关机,可是手又很懒怎么办. Step1:系统偏好设置-键盘中选中"所有控制" Step2:再试一下: 这个时候看到蓝色的虚框了吧,按空格就可以选中虚框的内容,而回车还是蓝色高亮按钮,按 tab 可以切换,加按 Shift 可以倒退,于是这个问题就解决了. 编

c# textbox 怎样实现按tab键的时候光标在一系列textbox之间的顺序移动

问题描述 c# textbox 怎样实现按tab键的时候光标在一系列textbox之间的顺序移动 如图所示,前面几个按tab键的时候会顺序移动,后面几个控件拖拽上去的顺序有点乱,按tab键的时候非顺序移动 解决方案 设置控件的taborder属性.从0开始编号,决定了tab的顺序 解决方案二: 我顺序设置了tabindex的值,可是为什么还是按照原来的顺序移动光标啊 解决方案三: 视图---tab健顺序 在窗口上所有的控件会显示顺序,移动光标到控件上,按顺序单击.搞定

网页中的哪些标签能获取TAB键焦点

问题描述 网页中的哪些标签能获取TAB键焦点,比如A类型标签就能.还是节点下的某一个属性决定的.

Windows系统Tab键使用方法

Tab键是哪个? #@&----@! 好了,不开玩笑了,下面聊聊Windows系统下面Tab键的各种用法,会的请绕行,不会的请板凳. 基本用法 1.改变焦点 聚焦到下一个按钮,输入框或者链接等.例如:关闭一个未保存的记事本,会弹出一个提示,此时,"是"按钮上有一个虚线框,如果按下空格或者回车就相当于用鼠标点击了"是"按钮.想用键盘来"点击""否"按钮的话,按下 Tab 键,虚线框就会转移到"否"上,