Qt覆盖标题栏和菜单栏

Qt override Title bar and menu bar?

本文关键字:菜单栏 标题栏 覆盖 Qt      更新时间:2023-10-16

我开始了一个我一直在计划的项目,我有一个快速的问题。

我希望有尽可能多的屏幕空间。要做到这一点,我需要使标题栏更薄,我还想让菜单栏隐藏,直到它被悬停在上面。

是否有一个功能,可以让我们快速缩小标题栏。

我很确定我需要使用setMenuWidget()来创建一个自定义菜单栏,然后添加标签、信号和其他有趣的菜单内容。我是对的,setMenuWidget()除了设置所有标签和连接的函数外,我还需要吗?我是否必须在类中创建一个变量,或者我可以创建一个名为setUpMenuBar()的函数?

我尽量把这句话表达清楚。有时候我的问题有点模糊,如果你清楚的话,尽管问。

谢谢!

使用全屏模式去掉标题栏。我认为这将比一个非标准的细标题栏更用户友好。

是否需要自定义菜单栏小部件的成员变量仅取决于您对它的使用。如果您所做的只是创建菜单,那么就不需要为它保留成员变量。QMainWindow获取菜单栏指针的所有权,并在适当的时候删除它。

MyMainWindow::setUpMenuBar() {
    MyCustomMenuBar * menubar = new MyCustomMenuBar;
    // add all the menus
    setMenuWidget( menubar );
}  

你甚至可以在以后检索到一个指向菜单栏的指针:

MyCustomMenuBar * menubar = qobject_cast<MyCustomMenuBar *>( menuWidget() );

如果你更频繁地需要这个指针,你可以重写MyMainWindow::menuWidget()或者将指针保存为成员