原创文章,欢迎转载。转载请注明:转载自 祥的博客
原文链接:https://blog.csdn.net/humanking7/article/details/80697667
1. 方法1 - 通过Qt Designer进行编辑
用Qt Designer
进行编辑特别简单,只需要将其切换到编辑Tab顺序
的模式下,然后按照想要的Tab切换顺序
进行点击,就OK了,而且所见即所得。
效果:
2. 方法2 - 通过代码进行编辑调整
现在通过代码将上述顺序变为:
lineEdit_5 -> lineEdit_4 -> btn_3 -> btn_2 -> btn_1
在构造函数中进行设置,将会覆盖在ui
文件中设定的顺序。
调用的是QWidget
的一个静态函数。
static void QWidget::setTabOrder(QWidget * first, QWidget * second)
Puts the second widget after the first widget in the focus order.
Tab_switch::Tab_switch(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
// 设置焦点切换顺序
// lineEdit_5 -> lineEdit_4 -> btn_3 -> btn_2 -> btn_1
QWidget::setTabOrder(ui.lineEdit_5, ui.lineEdit_4); // 5 -> 4
QWidget::setTabOrder(ui.lineEdit_4, ui.btn_3); // 4 -> 3 [5 -> 4 -> 3]
QWidget::setTabOrder(ui.btn_3, ui.btn_2); // 3 -> 2 [5 -> 4 -> 3 -> 2]
QWidget::setTabOrder(ui.btn_2, ui.btn_1); // 2 -> 1 [5 -> 4 -> 3 -> 2 -> 1]
}
注意: 大致就是要改就改一套顺序链。
效果:
3. 禁止某个控件相应Tab键进行切换
Tab_switch::Tab_switch(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
// 设置焦点切换顺序
// lineEdit_5 -> lineEdit_4 -> btn_3 -> btn_2 -> btn_1
QWidget::setTabOrder(ui.lineEdit_5, ui.lineEdit_4); // 5 -> 4
QWidget::setTabOrder(ui.lineEdit_4, ui.btn_3); // 4 -> 3 [5 -> 4 -> 3]
QWidget::setTabOrder(ui.btn_3, ui.btn_2); // 3 -> 2 [5 -> 4 -> 3 -> 2]
QWidget::setTabOrder(ui.btn_2, ui.btn_1); // 2 -> 1 [5 -> 4 -> 3 -> 2 -> 1]
// 禁止 lineEdit_4 响应 Tab 键
ui.lineEdit_4->setFocusPolicy(Qt::NoFocus);
// 现在顺序: lineEdit_5 -> btn_3 -> btn_2 -> btn_1
}
效果:
附上Qt::FocusPolicy
的定义,这个enum
类型的作用就是设置焦点策略。
enum FocusPolicy {
NoFocus = 0,
TabFocus = 0x1,
ClickFocus = 0x2,
StrongFocus = TabFocus | ClickFocus | 0x8,
WheelFocus = StrongFocus | 0x4
};
在之前的博客 [QT]屏蔽Tab键切换控件焦点 https://blog.csdn.net/humanking7/article/details/80654775 中用了事件过滤器
进行屏蔽Tab键切换,而现在只需要简简单单一行代码就搞定了,简直是…….无语啊,所以还是要多去看看帮助文档中的类成员函数,书到用时方恨少啊。
4. 代码下载
代码下载地址: https://download.csdn.net/download/humanking7/10479754