QSubWindow是不是无法接收键盘事件

yinshi2006 2014-07-16 04:20:05
RT
继承自QWidget的窗体放入midArea后,虽然重写了

void keyPressEvent(QKeyEvent * event);
void keyReleaseEvent(QKeyEvent * event);

这两个函数,键盘按下无反应。继承自QMainWindow的主窗体可以。
...全文
251 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yinshi2006 2014-07-18
  • 打赏
  • 举报
回复
很遗憾,这种方法最终还是Pass了。 原因是这样的,加入setFocusPolicy(Qt::StrongFocus)后,确实可以响应键盘事件了,后来发现事件接收的不稳定。 不稳定:会出现没有Press或Release事件的情况,大多发生在Ctrl或Alt等键长按的时候。 举个例子: Ctrl按下------------------------------抬起,Ctrl按下----抬起。 按理说应该是接收到4个事件Press和Release成对出现,但实际上第一个抬起没有Release,而第二个按下也没有Press。 实际上就收到了一对事件。 因为主要是功能键事件,这个问题比较在意。之前发生过一次VS2012+Qt521产生的问题(可以翻看之前的帖子),所以不知道这个是不是也是这样,我就不尝试了。 有兴趣的话深入分析一下吧。
foruok 2014-07-17
  • 打赏
  • 举报
回复
引用 4 楼 yinshi2006 的回复:
好了。 Qt用起来好多细节方面的坑啊,有体系的讲解或说明么。
帮助中都有,仔细研究下,这是最好的资料了。 买我的书也行,《深入浅出 Qt on Android》,里面对 Qt 的很多概念性的、容易混淆的核心内容作了详尽讲解。9月份上市。
yinshi2006 2014-07-17
  • 打赏
  • 举报
回复
好了。 Qt用起来好多细节方面的坑啊,有体系的讲解或说明么。
foruok 2014-07-17
  • 打赏
  • 举报
回复
在你实现的类里的构造函数中,要这样:setFocusPolicy(Qt::StrongFocus),告诉系统你接收焦点。
yinshi2006 2014-07-17
  • 打赏
  • 举报
回复
晕,没什么代码。 QT521+VS2012 新建工程,用设计器拖一个mdiare到主窗体。 代码 从qwidget继承一个窗体TestForm,重写keyPressEvent和keyReleaseEvent,函数内部就是qDebug输出(随便什么)。 在主窗体的构造函数里new一个TestForm,ui.mdiArea->addSubWindow加入到mdi区。 够简洁了吧。 这时按键盘,什么都不输出,设断点也不停。 是不是需要连接键盘的信号到TestForm的槽,但是qt文档里找不到主窗体键盘的信号。
foruok 2014-07-16
  • 打赏
  • 举报
回复
肯定是可以接收的。把代码贴出来。

16,815

社区成员

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

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