qt按键焦点切换

实现内容

对于4个控件,当按下左右按键时焦点可以左右切换,如下图:


关键代码

1.实现焦点切换功能

使用事件过滤器来对事件进行分类处理这样就可以在a1至a4等控件上实现,按下右键后即把焦点转到右边控件上的功能。

先在aa.h中加入

public slots:

booleventFilter(QObject *,QEvent *);

在aa.cpp中定义函数

bool aa::eventFilter(QObject *watched, QEvent*event)

{

   if(watched == ui->a1 || watched == ui->a2 || watched == ui->a3|| watched == ui->a4)//确认可控的控件

    {

       if(event->type() == QEvent::KeyPress)//如果检测到按键

         {

              bool  f1 =ui->a1->hasFocus();

              bool  f2 =ui->a2->hasFocus();

              bool  f3 =ui->a3->hasFocus();

              bool  f4 =ui->a4->hasFocus();定义4个获得焦点的状态

           QKeyEvent *key_event = static_cast<QKeyEvent *>(event); //将事件转化为键盘事件

             if(key_event->key() == Qt::Key_Right)//右键

             {

                 if(f1)//焦点在a1

                {

                   focusNextChild();//焦点移动

                ui->a2->setFocus();//移动到a2

                }

                 if(f2)

               {

                   focusNextChild();

                ui->a3->setFocus();

                }

                 if(f3)

                {

                   focusNextChild();

                ui->a4->setFocus();

                }

             }

             if(key_event->key() == Qt::Key_Left)

             {

                 if(f4)

                {

                   focusNextChild();

                ui->a3->setFocus();

                }

                 if(f3)

                {

                  focusNextChild();

                ui->a2->setFocus();

                }

                 if(f2)

                {

                   focusNextChild();

                ui->a1->setFocus();

                }

             }

       }

}

return QWidget::eventFilter(watched,event);     //最后将事件交给上层对话框

}

左键功能定义稍加修改即可

 

2.实现动态焦点背景色变化功能

if (watched==ui->a1)         //

     {

         if (event->type()==QEvent::FocusIn)     //然后再判断控件的具体事件(这里指获得焦点事件)

         {

             QPalette p=QPalette();

             p.setColor(QPalette::Button,Qt::yellow);

             ui->a1->setPalette(p);

         }

另一种实现方法

另外一般的焦点切换还可以使用setCurrentItem函数实现,下面是在网上看到的代码:

bool MainForm::eventFilter(QObject *obj,QEvent *event)

{

         if(obj==ComboBox_Keyboard){       

                   if(event->type()== QEvent::KeyPress)

                   {

                            QKeyEvent*keyEvent = static_cast<QKeyEvent*>(event);

                            if(keyEvent->key()== 4100)//ENTER

                                     on_ComboBox_Keyboard(ComboBox_Keyboard->currentItem());

                            if(keyEvent->key()== 4117){//DOWN

                                     if(ComboBox_Keyboard->currentItem()==ComboBox_Keyboard->count()-1)

                                               ComboBox_Keyboard->setCurrentItem(0);

                                     else

                                               ComboBox_Keyboard->setCurrentItem(ComboBox_Keyboard->currentItem()+1);}

                            if(keyEvent->key()== 4115){//UP

                                     if(ComboBox_Keyboard->currentItem()==0)

                                               ComboBox_Keyboard->setCurrentItem(ComboBox_Keyboard->count()-1);

                                     else

                                               ComboBox_Keyboard->setCurrentItem(ComboBox_Keyboard->currentItem()-1);}

                            returnTRUE;            

                   }else{

                            returnFALSE;

                   }

         }

…………

}

 

参考资料:

http://zoreraul.blog.163.com/blog/static/725739282010828104621410/

http://zhidao.baidu.com/link?url=4DCT55CnwXzT1nC28f0oPb36rrlK7bp0eohV61gtlZY0IvzLucMRqMvIjNHq4Oc5_horjUhyDkeSy0A1VYW7hK

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值