打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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->bsetTabOrder(b, c);  //a->b->csetTabOrder(c, d);  //a->b->c->d
  • 1
  • 2
  • 3
  • 4

而不是这样:

//错误setTabOrder(c, d);  // c->dsetTabOrder(a, b);  // a->b 和 c->dsetTabOrder(b, c);  // a->b->c, 但不是c->d
  • 1
  • 2
  • 3
  • 4

源码

这里以三个按钮如三个输入框为例,来说明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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
setStyleSheet来设置图形界面的外观
用QT实现的用于显示输入IP的LineEdit控件
QSS-pyqt样式表
【Python GUI库大比拼】PyQt5 VS PySide6,谁才是最佳选择?
PyQt5 GUI应用程序工具包入门(2)
PyQt5 GUI应用程序工具包入门(3)—信号槽
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服