QMenu与父类的关系

在Qt编程中遇到QMenu宽度自适应问题,发现即使设置padding和margin也无法调整大小。原因在于QMenu的大小由其菜单项的盒模型决定,且子窗口的min-width和min-height限制了QMenu的调整。解决方案是确保QMenu的父类为QMainWindow,避免子窗口样式表的影响。同时强调在编写代码布局时要注意父类的尺寸设置和QLayout的管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

由于最近写的界面包含的子窗口太多,考虑到不同ui通信的问题,遂决定将部分子窗口用代码写。这种方法相比ui designer来说是更复杂麻烦了些,代码量也大了很多,而且变量的命名也常常让我迷失其中……特此记录一下

问题描述

在设置QMenu的时候,以往基本都是这么写的:

// this指代MainWindow
m_menu = new QMenu(this);

但是这次我变成了这样:

//BW_Widget为MainWindow的一个子窗口
m_menu = new QMenu(BW_Widget);

接下来一个小时都在纠结QMenu的宽度很大,明明文字很少却仍旧很大,甚至通过样式表还有函数设置宽高都不管用。

一篇有用的博文

原文链接: QMenu常规使用和样式设置
菜单QMenu大小是由菜单项大小组成的,而菜单项是一种典型的盒模型,由margin、border、padding 和content组成的。所以在设置样式表的时候,合理设置一下padding以及margin会使得菜单栏更好看。
在这里插入图片描述

总结
  • 即便找到了通过padding与margin设置QMenu大小的方法,但是我的界面菜单的宽度几乎和我子窗口的宽度一样。然后我就把构造函数那里的父类换成QMainWindow再运行果然没问题了。
  • 再次深究还是因为我在子窗口的样式表中设置了min-width以及min-height,此时再给子窗口的子控件比如QLabel或者QMenu再设置max-width或者max-height,如果小于**min-**它就无法生效,在界面上表现出来就是子控件的大小和子菜单差不多大。
  • 在这里也劝解大家今后用代码写ui时写父类的时,但要注意父类的一些border以及width/height在样式表中的设置,一些关键性的问题说不定就是源于此。
  • QLayout的父类设为谁,那它就是谁的布局,在qt designer里我们不方便设置布局的控件(如QPushButton)通过代码却很好设置布局,这时这个布局里又可以添加其他控件啦,但是注意某个控件只能做一个布局的父类!

多加练习吧~

QT样式表qss设置后无效的原因大全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值