【这个文章永远没有完结,digger们请将更好的原则添加进来,如果有Conflict就增加更多的comments】
==编写格式==
每个人各自写自己的部分,苍松已经写好了。
如果你想写comments,就在每条下面写,然后记得写by谁~
==苍松的箴言==(哈哈,这个词用的过了~)
1. 如果不想让ui变得太难调,就尽量少在C++代码里设置widget们得各种属性,ui文件里设置就可以了
2. 如果设置一些属性就先考虑一下,这个属性在这个页面,或者整个应用上有没有什么共同性,如果有,就在更加上层的页面设置。
譬如,这个应用的绝大部门文字都是黑的,那就在最上层设置color:black;
3. promote一个widget是个好习惯,不要总用C++代码产生一些ui,这样不好维护。
4. 有时spacer,那个弹簧不是非常听话,这时放个QWidget也许更好,因为他有各种sizePolicy和最大最小size。
5. 如果不需要为一个widget设置stretch,那他的stretch最好为0,如果想最大化一个widget,让他占满剩下的所有空间,其他为0,他可以直接为1.
6. QStackedWidget也是可以通过designer设置page的,别蛋疼的去写cpp了
7. 如果一个widget的有父亲,但是这个widget没有add到一个layout里面,那么这个widget就会游离,这个是个设置悬浮widget的技巧。
8. stylesheet里面background-image比起border-image有更好的性能,因为该死的border-image默认要算缩放。
9. 如果你有需求给一个scrollarea或者任何相关的子类设置背景,那么你可以考虑在他父亲那里设置,要不用border-image,他会算死。
10. 可重用的widget最好单拿出来设计成一个ui文件。
11. 单拿出来的ui文件就算有配套的cpp和h,也是可以单拿出来重用的,你可以在另一个工程里包含这个ui,然后自己创建类似的新cpp和h,他们一样可以用,无缝的。
12. QFrame子类们有可能有边框,设置成NoFrame就没了
13. 我喜欢把按钮槽什么的直接用designer生成
14. 再说吧~心情挺好,收拾收拾屋子
====Wilbur====
1. background-image的显示效率高,是因为他不用随控件resize。所以要让背景图显示完整,还是用border-image。
2. stylesheet的设定,一般、最好是指定object name或者是它应该影响的控件。因为父控件的样式会被子控件继承。如果某控件样式上出了问题:1)检查父控件是否设置了stylesheet,2)代码里有没有哪些地方设置了stylesheet,3)哪个控件设定样式表的时候没有指定object name或者控件类型。
3. 说个layout的。如果一个layout里包含了两个控件,但是分别在不同条件下显示。show一个widget前一定要让另外的widget先hide,也就是说先让整个layout里所有控件先hide、后show指定的控件。否则,如果让所有控件先show、然后hide不需要的控件,很可能整个layout就缩不回来了。
4. 强调一下: 自己的代码里尽量别写跟layout相关的、跟样式相关的代码,否则很可能成为一个很具有挑战性的BUG。
5. 尽量用layout去规范控件在 resize event时的行为和大小,代码里最好不要重载QEvent::resizeEvent,因为带有layout的组合控件可能会接收到多次resizeEvent。造成的影响:1)频繁处理resize event,页面显示效率低;2)如果在重载的resize event里做了些显示相关的处理,很可能影响到显示的内容;3)因为无法区分多次的resize event的来源,可能是因为横竖屏切换导致的整个window的resize,也可能是因为某个widet的resize导致的(想想这个理由不太成立)
5. 未完待续.......