前言
由于最近写的界面包含的子窗口太多,考虑到不同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)通过代码却很好设置布局,这时这个布局里又可以添加其他控件啦,但是注意某个控件只能做一个布局的父类!
多加练习吧~