使语句更通顺.

Signed-off-by: ithink.chan <chenyang@autoai.com>
This commit is contained in:
ithink.chan 2019-11-18 17:48:50 +08:00
parent 16b94db7b7
commit c6a8410827
1 changed files with 3 additions and 3 deletions

View File

@ -1,8 +1,8 @@
# QMainWindow_动态切换菜单栏
# QMainWindow 动态切换菜单栏
因为种种原因,需要根据情况动态切换菜单栏。可以手动编码,也可以使用 UI 类。使用 UI 类来实现的话更清晰些,每个菜单的功能代码写到各自的文件里,主界面只负责切换就行,非常简洁。
没时间,就贴代码吧,不上图了,脑补一下吧。示例工程树如下:
没时间,就只贴代码,不上图了,脑补一下吧。示例工程树如下:
* Demo.pro
* main.cpp
@ -63,7 +63,7 @@ void MainWindow::on_pushButtonB_clicked()
## 高级篇
上面每次切换菜单都会自动删除上次菜单栏对象,然后再新分配一个。但是有的项目需要这些对象从一开始就分配出来,并且不再被释放。例如菜单有各自的状态,在不同状态下某些项目是禁能的,如果每次重新创建,就需要在其他地方记录状态,这使代码变得复杂。有没有办法不进行重新分配呢?这样每个菜单栏自己就可以记录状态。
上面每次切换菜单都会自动删除上次菜单栏对象,然后再新分配一个。但是有的项目需要这些对象从一开始就分配出来,并且不再被释放。例如菜单有各自的状态,在不同状态下某些项目是禁能的,如果每次重新创建,就需要在其他地方记录状态,这使代码变得复杂。有没有办法不进行重新分配呢?这样每个菜单栏自己就可以记录状态。
通过分析 setMenuBar 方法,发现其会调用 oldMenuBar->deleteLater() 方法释放旧的菜单栏对象。而 deleteLater() 主要是给自己发送 DeferredDelete 事件,然后在事件循环中释放自己。因此我们可以重写 MenuA 和 MenuB 的 event() 方法,来拒绝删除操作,这样每次 setMenuBar() 的时候都不会删除旧的菜单栏,因此下次使用的时候也就不需要再重新分配了。参考代码如下: