qt按键焦点切换
来源:互联网 发布:mac草莓红和番茄红 编辑:程序博客网 时间:2024/05/21 12:46
实现内容
对于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
- qt按键焦点切换
- Qt自由切换焦点
- Qt控件焦点切换
- uCGUI 按键切换对话框内子控件焦点
- QT widget 失去焦点不响应按键
- Qt之Tab键切换焦点顺序
- Qt之Tab键切换焦点顺序
- 用ENTER键切换控件焦点,并模拟按键
- 用ENTER键切换控件焦点,并模拟按键
- 实现tab按键切换Edit控件焦点(WTL)
- js捕获键盘按键值,并且实现焦点切换
- 【Qt】Qt之Tab键切换焦点顺序【转】
- 安卓TimePicker在当前页面通过按键事件切换焦点的方法
- QT 按键
- QT获取控件焦点,判断对象类型,模拟发送按键消息
- Android按键音(焦点)
- 回车切换焦点问题
- 回车切换焦点
- Pow(x, n)
- 精实未必总能创造出更好的产品
- Java中十六进制转换 Integer.toHexString()
- RMAN跨平台(endian format不同)迁移数据库
- To show image on Android
- qt按键焦点切换
- C# List转DataSet
- test
- <<做个截图>>iOS版隐私政策
- SpringMvc 集成 shiro 实现权限角色管理-maven
- sharesdk的使用,有关分享和第三方登录
- Python 基础语法(和Java相比)
- GNU Bison 中文手册
- Office打开时提示某个对象程序库(|)丢失或损坏