Chinaunix首页 | 论坛 | 博客
  • 博客访问: 147238
  • 博文数量: 40
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 410
  • 用 户 组: 普通用户
  • 注册时间: 2014-02-11 09:11
文章分类

全部博文(40)

文章存档

2020年(1)

2017年(36)

2014年(3)

我的朋友

分类: C/C++

2017-03-17 14:34:10



我用QT设计师做了这个部件(下面称它为PC),其实就是三个按钮,我在一个widget中添加了多个PC并按照一定的规则排列,我希望达到的目的:

1. 初始状态下loginmanage两个按钮是隐藏的;

2. 当鼠标移动到大按钮上时,loginmanagel两个按钮显示并可以进行点击操作,当鼠标离开大按钮是隐藏这两个按钮;

3. tab键在多个PC间切换,不管焦点在哪个按钮上,只要按下Tab键就立刻切换到下个PC的大按钮上;

4. 用四个方向键在所有PC的所有按钮键之间切换。

5. 当焦点在大按钮上时,按下Enter键显示loginmanage按钮,或者按下downright方向键显示两个按钮。

看起来应该很容易实现,但是实际用代码实现时遇到了一些问题。

首先目的2

鼠标进入大按钮后会触发事件,QEvent::Enter,捕捉到该事件后直接调用函数显示loginmanage,但是如果你想要对这两个按钮进行点击操作就要稍微麻烦一点,首先声明有很多方法实现这个功能。

因为要对2个小按钮操作就必须要离开大按钮,但是这就会触发鼠标离开事件QEvent::Leave,小按钮隐藏了,也就无法对其操作了。

我用了一个很简单的办法,就是鼠标离开的时候,判断鼠标是从哪里离开的,如果是下面离开,那么就先不要隐藏2个小按钮,同理如果从login按钮的右方或者上方离开时不要隐藏,如果从manage的左方或者上方离开时不要隐藏,但是这个方法有个很尴尬的问题——如果从三个按钮的缝隙间离开也不会隐藏,确实很尴尬,希望大家给出更好的办法^_^

接着目标345

其实QT的容器部件中有默认按钮事件处理方式,如果不搞这个“隐藏”活动,完全没必要做下面的事情:

大按钮只需要重新处理一下EnterTab键和downright方向键,QTEnter键对应事件Qt::Key_ReturnQT中有如下定义

Key_Return=0x01000004,

Key_Enter=0x01000005,

但是Key_Enter没反应,真是搞笑。

给一下代码

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

{

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

if(keyPEvent1->key()==Qt::Key_Return)

{

showButton();

focusNextChild();

}elseif(keyPEvent1->key()==Qt::Key_Tab)

{

hideButton();

focusNextChild();

}elseif(keyPEvent1->key()==Qt::Key_Right)

{

showButton();

focusNextChild();

}elseif(keyPEvent1->key()==Qt::Key_Down)

{

showButton();

focusNextChild();

}

}

接下来是login按钮的处理

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

{

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

if(keyPEvent3->key()==Qt::Key_Tab)

{

hideButton();

focusPreviousChild();

focusNextChild();

}elseif(keyPEvent3->key()==Qt::Key_Right)

{

hideButton();

focusPreviousChild();

focusNextChild();

}elseif(keyPEvent3->key()==Qt::Key_Down)

{

hideButton();

focusPreviousChild();

focusNextChild();

}

}

说明:login函数的tab键处理中,在hideButton()函数执行后,如果什么都不加,焦点会跳2下,所以加了focusPreviousChild(),这里我没有太深入了解,自己猜测了几个可能,希望高手指点。

阅读(1500) | 评论(0) | 转发(0) |
0

上一篇:信号和槽

下一篇:QT国际化

给主人留下些什么吧!~~