目前来看QMenu的使用存在这几个问题。
1、如果使用了临时变量的QMenu,并且没有指定父窗体,例如:
QMenu menuDemo;
menuDemo.addAction(“test”);
menuDemo.exec();
那么会存在一个问题,就是如果使用某个快捷键将QMenu所在的Widget给关闭掉,QMenu并不会随着消失,这样子在流程上就存在着问题。
2、如果使用了临时变量的QMenu,并且指定父窗体,例如:
QMenu menuDemo(this);
menuDemo.addAction(“test”);
menuDemo.exec();
那么会存在一个问题,就是如果使用某个快捷键将QMenu所在的Widget给关闭掉,QMenu的父窗体会delete一次QMenu,然后QMenu作为临时变量又会被delete一次,就会导致crash的问题。
3、如果使用了指针QMenu,并且没有指定父窗体,例如:
QMenu *menuDemo = new QMenu;
menuDemo->addAction(“test”);
menuDemo->exec();
那么情况将会和1一样,使用某个快捷键将QMenu所在的Widget关闭掉,QMenu不会随着消失,改变了原本的流程,并且因为使用了指针,还会造成内存泄露。
综上所述,所以在使用QMenu的时候一定要使用指针的QMenu, 并且需要明确指定他的父窗体。例如在Preview这个Widget右键弹出一个QMenu,就需要用如下的方式进行创建