当前位置: 代码迷 >> QT开发 >> 给一个窗口发shortcut讯息,为什么窗口不能直接处理?需要用eventfilter才能收到
  详细解决方案

给一个窗口发shortcut讯息,为什么窗口不能直接处理?需要用eventfilter才能收到

热度:391   发布时间:2016-04-25 02:58:17.0
给一个窗口发shortcut消息,为什么窗口不能直接处理?需要用eventfilter才能收到?
先给主窗体绑定一个快捷键事件

QShortcut  *shortcut = new QShortcut(QKeySequence(tr("ctrl+z", "test")), this);
MainMgr::shortcutID=shortcut->id();
connect(shortcut, SIGNAL(activated()), this,SLOT(slotDoSomeThings()));


给MainMgr::mainWnd 发一个shortcut消息

QShortcutEvent *e = new QShortcutEvent(QKeySequence("ctrl+z"), MainMgr::shortcutID);
bool b = QCoreApplication::sendEvent(MainMgr::mainWnd, e);



主窗体直接接收不到这个消息,也就是说,直接调不到slotDoSomeThings函数


但是给主窗体安装一个事件过滤器

bool WndEventTest::eventFilter( QObject *obj, QEvent *event )
这里就能收到这个事件.

这是为什么?
------解决思路----------------------
因为connect并没有给主窗口绑定shortcut事件,而是给shortcut那个对象绑定的actived事件.
你应该给shortcut发actived的消息.