先给主窗体绑定一个快捷键事件
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的消息.