QT下使用方向键控制按键的移动

qq_35090619 2017-01-13 10:23:48
大家好,小弟是新手,现在有个问题需要请教,是在嵌入式平台下,UI中有6个菜单,使用Qpushbutton控件,无触摸屏,使用物理按键(使用keys-gpio已实现键盘功能)我想使用Key_Right和Key_Left来控制按键焦点的移动,在网上参考网友的代码,现在按下Key_Right焦点乱跑,请各位高手,如何控制焦点的移动,谢谢!


#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);

ui->btn0->installEventFilter(this);
ui->btn1->installEventFilter(this);
ui->btn2->installEventFilter(this);
ui->btn3->installEventFilter(this);
ui->btn4->installEventFilter(this);
ui->btn5->installEventFilter(this);
}

Widget::~Widget()
{
delete ui;
}

bool Widget::eventFilter(QObject *watched, QEvent *event)
{
if(watched == ui->btn0 || watched == ui->btn1 || watched == ui->btn2
|| watched == ui->btn3 || watched == ui->btn4 || watched == ui->btn5){
if(event->type() == QEvent::KeyPress){
bool b0 = ui->btn0->hasFocus();
bool b1 = ui->btn1->hasFocus();
bool b2 = ui->btn2->hasFocus();
bool b3 = ui->btn3->hasFocus();
bool b4 = ui->btn4->hasFocus();
bool b5 = ui->btn5->hasFocus();

QKeyEvent *key_event = static_cast<QKeyEvent *>(event);
if(key_event->key() == Qt::Key_Right){
if(b0){
qWarning()<<"----btn0";
focusNextChild();
ui->btn1->setFocus();
}
if(b1){
qWarning()<<"----btn1";
focusNextChild();
ui->btn2->setFocus();
}
if(b2){
qWarning()<<"----btn2";
focusNextChild();
ui->btn3->setFocus();
}
if(b3){
qWarning()<<"----btn3";
focusNextChild();
ui->btn4->setFocus();
}
if(b4){
qWarning()<<"----btn4";
focusNextChild();
ui->btn5->setFocus();
}
if(b5){
qWarning()<<"----btn5";
focusNextChild();
ui->btn0->setFocus();
}
}

if (watched==ui->btn0){
if (event->type()==QEvent::FocusIn){
qWarning()<<"btn0 focus in";
}
else if (event->type()==QEvent::FocusOut){
qWarning()<<"btn0 focus out";
}
}
if (watched==ui->btn1){
if (event->type()==QEvent::FocusIn){
qWarning()<<"btn1 focus in";
}
else if (event->type()==QEvent::FocusOut){
qWarning()<<"btn1 focus out";
}
}
if (watched==ui->btn2){
if (event->type()==QEvent::FocusIn){
qWarning()<<"btn2 focus in";
}
else if (event->type()==QEvent::FocusOut){
qWarning()<<"btn2 focus out";
}
}
if (watched==ui->btn3){
if (event->type()==QEvent::FocusIn){
qWarning()<<"btn3 focus in";
}
else if (event->type()==QEvent::FocusOut){
qWarning()<<"btn3 focus out";
}
}
if (watched==ui->btn4){
if (event->type()==QEvent::FocusIn){
qWarning()<<"btn4 focus in";
}
else if (event->type()==QEvent::FocusOut){
qWarning()<<"btn4 focus out";
}
}
if (watched==ui->btn5){
if (event->type()==QEvent::FocusIn){
qWarning()<<"btn5 focus in";
}
else if (event->type()==QEvent::FocusOut){
qWarning()<<"btn5 focus out";
}
}
}
}
return QWidget::eventFilter(watched,event);
}
...全文
1011 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧