右键后popup出来的menu里面,想在popup后模拟鼠标自己选择我给他指定的item的action,可是那个QMenu.exec()貌似是在函数内部执行这一步的,在popup后菜单也不显示出来,只是在exec()后才显示,而且要在exec的过程中选择一个item,这个函数才算执行完,才会返回值,下面是exec()的源代码,觉得看完似懂非懂,好像是需要一个一直循环的监视器来监视是否有action发生,可是那个d,看完部分源代码窃以为是QMenuPrivate 但是这个变量是个protected的,所以我想自己用也用不到,自己单有个eventloop也没用。。。。。死活没反应。。。。
QAction *QMenu::exec(const QPoint &p, QAction *action)
{
Q_D(QMenu);
createWinId();
QEventLoop eventLoop;
d->eventLoop = &eventLoop;
popup(p, action);
QPointer<QObject> guard = this;
(void) eventLoop.exec();
if (guard.isNull())
return 0;
action = d->syncAction;
d->syncAction = 0;
d->eventLoop = 0;
return action;
}