关于QApplication的notify恢复的问题

john_liqinghan 2019-02-28 07:40:32
class MyApplication : public QApplication {

public:

MyApplication(int&argc,char **argv);
~MyApplication();
protected:
bool notify(QObject*, QEvent *);
private:
bool m_lock;
};

bool MyApplication::notify(QObject* obj, QEvent *e)
{
if(e->type() == QEvent::KeyPress)
{
qDebug()<<"my application keypress :"<<m_lock;
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);

if(keyEvent->key() == Qt::Key_F1) {
m_lock = !m_lock;
qDebug()<<"key F1 press \n";

}
}
//qDebug()<<"my application "<<m_lock;
if(m_lock) return true;

return QApplication::notify(obj,e);
}


m_lock 初始值是false。
我想实现按一下F1,所有事件都无法用了,在按一下F1又恢复了。
这个代码现在表现的是就按一次F1后,鼠标键盘都不动。再次按下F1没有恢复。请问什么问题呢?
...全文
325 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
星巡方舟 2021-08-09
  • 打赏
  • 举报
回复

大佬,请问能问一个QT的QKeyEvent相关问题吗?我是个只写过串口程序的QT萌新。
系统是Linux(不过貌似QT不在乎这个),我写了个串口程序,可以通过一个传感器识别高热源物体运动方向,用方向标记char Direction;进行记录,值分别为w、a、s、d,然后我想让程序根据Direction的wasd值,向系统任意“当前界面”发送对应的上下左右方向键指令,以达到例如PPT翻页、网页上下翻页的效果,请问应该怎么用QKeyEvent呢?
如果可以赐教,请问能否加微信联系?微信号是17326067234。

john_liqinghan 2019-03-01
  • 打赏
  • 举报
回复
明白了,这个notify只是全局的通知过程,它只是获取底层鼠标和按键事件(经过QT处理的)消息,通知给上面的界面。
所以这里并不会静止鼠标

if(m_lock) return true;
return QApplication::notify(obj,e);

这句if(m_lock) return true;把所有的时间都屏蔽了,导致界面的任何事件都都不会起作用,包括界面刷新等事件。
所以看到的并不是鼠标不动,而是界面不响应了。如果真正要禁止鼠标和键盘事件,应该判断该事件是否是鼠标和键盘事件,如果是直接返回,其他,则不应该屏蔽。

实验可以看到:
按下F1后鼠标都可以输入,就是界面不响应。

16,203

社区成员

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

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