简介
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
而不是这样:
//错误setTabOrder(c, d); // c->dsetTabOrder(a, b); // a->b 和 c->dsetTabOrder(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);
- 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
。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。