[QT]实现Tab键切换控件的两种方式及禁止Tab切换的简单方法



原创文章,欢迎转载。转载请注明:转载自 祥的博客

原文链接:https://blog.csdn.net/humanking7/article/details/80697667



1. 方法1 - 通过Qt Designer进行编辑

Qt Designer进行编辑特别简单,只需要将其切换到编辑Tab顺序的模式下,然后按照想要的Tab切换顺序进行点击,就OK了,而且所见即所得。

IMG20180614185038.png

效果:

IMG20180614900000.gif

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]       
}

注意: 大致就是要改就改一套顺序链。

IMG20180614192740.png

效果:

IMG20180614900001

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

}

效果:

IMG20180614900002

附上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


赞赏码New

  • 11
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt中,方向可以用于控制焦点在不同控件之间切换。在默认情况下,焦点可以通过Tab控件之间切换,而方向可以改变焦点的默认行为。 当用户按下方向时,Qt会根据当前焦点所在的控件和按下的方向来确定下一个焦点应该是哪个控件。例如,如果当前焦点在一个文本框中,按下向下方向,焦点可能会切换到下一个可接受焦点的控件,例如下一个文本框或者一个按钮。同样地,按下向上、向左或者向右方向时,焦点会在可接受焦点的控件之间切换。 在Qt中,可以通过重写控件focusInEvent()或者focusOutEvent()函数来处理焦点切换时的事件。在这些事件中,可以根据需要来修改控件的样式或者执行其他自定义操作。可以利用Qt的事件过滤器机制来拦截和处理特定的焦点切换事件。 此外,Qt还提供了一些属性和函数来控制焦点切换的顺序和规则。使用QWidget的setFocusPolicy()函数可以设置控件接受焦点的策略,例如设置为Qt::StrongFocus表示控件可以接受焦点,并且方向可以改变焦点。此外,可以使用QWidget的setTabOrder()函数来设置控件之间的Tab切换顺序,从而影响焦点切换时的方向切换行为。 总之,Qt提供了灵活而强大的机制来处理方向控制焦点的功能,开发者可以根据自己的需求来定制焦点切换的行为和样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值