【问题标题】:Qt override Title bar and menu bar?Qt覆盖标题栏和菜单栏?
【发布时间】:2011-11-18 21:44:41
【问题描述】:

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

我希望拥有尽可能多的屏幕空间。为此,我需要使标题栏变细,并且我还希望隐藏菜单栏,直到将其悬停在上方。

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

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

我尽量把这句话说出来。有时我的问题有点模糊,所以如果你清楚了,就问吧。

谢谢!

【问题讨论】:

  • 如果你不能把你想做的事情用语言表达出来,那么你可能无法把它写成代码。不要过于挑剔,但要先思考,后编码。
  • 不,他解释得很好——他只是想要一个起点,而不是批评。

标签: c++ qt menubar titlebar


【解决方案1】:

使用full screen mode 去掉标题栏。我认为这将比看起来不标准的细标题栏更加用户友好。

【讨论】:

    【解决方案2】:

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

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

    您甚至可以稍后检索指向菜单栏的指针:

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

    如果您更频繁地需要此指针,您可以覆盖 MyMainWindow::menuWidget() 或将指针保存为成员。

    【讨论】: