找回密码
 立即注册
收起左侧

QT中运行的程序怎么禁用tab键的操作

9
回复
12446
查看
[复制链接]
累计签到:2 天
连续签到:1 天
来源: 2013-10-21 17:35:55 显示全部楼层 |阅读模式
5Qter豆
RT,QT中运行的程序怎么禁用tab键的操作

最佳答案

查看完整内容

其实不是不能截取tab切换焦点,而是因为实现的部件不对。 比如一个Widget上面有两个LineEdit部件,现在默认tab键可以在两个LineEdit间进行焦点切换,如果想改变这个行为,可以通过重新实现event()来做,但要注意这里重新实现的是哪个类的event()函数。 如果是重新实现了Widget类的event(),是无法取消tab键切换焦点的,这里需要重新实现QLineEdit类的event()函数,也就是说自定义QLineEdit,然后在Widget上面使用自定义的QLine ...
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2013-10-21 17:35:56 显示全部楼层
Marvelous 发表于 2013-10-22 14:18
我也是新手 我在网上找到了 以下的资料
http://blog.sina.com.cn/s/blog_4a42f4210100067j.html

其实不是不能截取tab切换焦点,而是因为实现的部件不对。


比如一个Widget上面有两个LineEdit部件,现在默认tab键可以在两个LineEdit间进行焦点切换,如果想改变这个行为,可以通过重新实现event()来做,但要注意这里重新实现的是哪个类的event()函数。

如果是重新实现了Widget类的event(),是无法取消tab键切换焦点的,这里需要重新实现QLineEdit类的event()函数,也就是说自定义QLineEdit,然后在Widget上面使用自定义的QLineEdit部件。

原因是:lineEdit部件在widget上,lineEdit比Widget先获取键盘事件,等lineEdit处理完键盘事件以后才会传到Widget去处理。
回复

使用道具 举报

累计签到:114 天
连续签到:1 天
2013-10-21 17:41:44 显示全部楼层
用QEvent 截取tab事件 不作任何处理  其他事件返回给widget处理
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2013-10-21 18:00:51 显示全部楼层
Marvelous 发表于 2013-10-21 17:41
用QEvent 截取tab事件 不作任何处理  其他事件返回给widget处理

能帮忙写一小段吗,我一直截取不到tab事件
回复

使用道具 举报

累计签到:114 天
连续签到:1 天
2013-10-22 14:18:20 显示全部楼层
我也是新手 我在网上找到了 以下的资料
http://blog.sina.com.cn/s/blog_4a42f4210100067j.html

根据里面的代码 可以实现截取tab事件 但是截取不了换焦点
不了解里面代码的MyCustomEvent 是什么 网上查不到。。
@yafeilinux 找老大指点一下
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2013-10-23 13:57:13 显示全部楼层
不知道这样可以不,禁用控件的焦点,这样的话,鼠标去点有没效果,没试过……

点评

当然 我这只是猜想,可能不可行  详情 回复 发表于 2013-10-23 14:00
回复

使用道具 举报

累计签到:410 天
连续签到:1 天
2013-10-23 14:00:05 显示全部楼层
a408815041 发表于 2013-10-23 13:57
不知道这样可以不,禁用控件的焦点,这样的话,鼠标去点有没效果,没试过…… ...

当然   我这只是猜想,可能不可行
回复

使用道具 举报

累计签到:114 天
连续签到:1 天
2013-10-23 17:07:28 显示全部楼层
yafeilinux 发表于 2013-10-23 13:46
其实不是不能截取tab切换焦点,而是因为实现的部件不对。

原来是这样 学习了
回复

使用道具 举报

累计签到:114 天
连续签到:1 天
2013-10-23 17:09:15 显示全部楼层
a408815041 发表于 2013-10-23 14:00
当然   我这只是猜想,可能不可行

你按版主的思路试试看
回复

使用道具 举报

累计签到:1570 天
连续签到:1 天
2013-10-24 09:28:19 显示全部楼层
a408815041 发表于 2013-10-23 14:00
当然   我这只是猜想,可能不可行

嗯,没关系的,在函数的最后面一定要调用默认的event(),例如:

bool MyLineEdit::event(QEvent *event)
{
    if (event->type() == QEvent::KeyPress) {
              QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
              qDebug() << "Ate key press" << keyEvent->key();
              return true;
    }
    return QLineEdit::event(event);
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了