背景:
个人笔记。
我之前没有系统化学习过任何资料,使用很多工具都是按需出发,直接上手,遇到问题再研究的。所以会有一些弯路。本文言语中难免有对个人情绪的生动描述,希望不要影响读者心情,这只是我学习过程的真实写照。
早先接手的项目中用到了QToolBar和QAction,一直用现成的,直到一次和同事讨论qss,在Creator中操作示例,才发现这叫一个难用。好不夸张说,多次尝试和对比才发现了玄机。
网上搜出来都是说如何new,如何addWidget,addAction之类,对于我没有意义。界面设计如果还不是可视化的,非要运行才能看效果,这不是我想要的。
当然我做的项目中,用到了用户功能权限的动态控制,用代码控制当然可以,但这不符合界面设计逻辑。
因此特别写下来记录。下面都是在creator中说明,不需要写代码,纯可视化实现。
QToolBar:
首先在creator中打开一个QMainWindow。可以看到右边“对象管理器”中的部件层级。
有点像MFC项目中的范例,它会默认带菜单栏,工具栏,状态栏。可以用鼠标在对象管理器中右键移除,也可以直接在窗体相应位置右键移除。
如果要添加,就在对象管理器根节点“MainWindow”上右键选择添加即可。
吐槽:
它就不能设计成统一风格?既然是部件,都从工具箱选择多好?纯个人习惯,我就感觉它不爽。想必qt这么设计有它的用意。
还有,我试过,通过提升为加上部件嵌套的方式,让MainWindow里再嵌套一个MainWindow,里面那个就不显示了。我没有深究为什么。一般也不这样用。主要是我同事提了一个需求,他希望改变工具栏层级,比如让它出现在其它部件的里面。
但qt的套路,我现在的理解是,工具栏不是普通部件,它只能属于MainWindow,因此它不能像其它部件那样随意安排位置。因为我暂时用不到,暂且搁置不深究了。有兴趣的朋友,咱们评论区详聊。
关于creator中的其它子窗体:
玩过vs的应该知道,IDE中的各种子窗体都可以随意改变位置和关闭,根据需要再显示。比如工具箱、对象管理器、资源管理器、解决方案管理器、类视图、调试窗口等。
qt里面貌似很多都是死的,就如下面这样:
像工具箱、对象管理器、属性管理器、下面的Action Editer等,可以拖拽改变位置,但没有右上角一个小叉。这些无伤大雅,也算各有风格。需要适应一下。此刻请记住这个图片,一会儿提到。
QAction:
使用上面的方法,为窗体添加一个工具栏。
添加后,会多出上图红色部分。此刻它就是个空容器,卵用没有。
然后看下面的Action Editer。是可以添加QAction,但跟界面没任何关系。
上图蓝框部分没有对钩,即使在右边属性那里有enabled值为true,这里也不行。如果第一次接触这里,能烦死。
此刻留意右上方的对象管理器:
尽管下面添加了几个QAction,但是他们跟QToolBar没产生联系。qt的意思是,QAction是个特殊零件,刚才只是管理这些零件,回头还得跟QToolBar连接才行。也就是代码里的addAction和addWidget。
这个时候用鼠标从Action Editer里面,把这些action拖拽到窗体上:
上图篮圈的部分有变化。拖拽的时候,在窗体那个很窄的工具栏上会有一个红色的依附指示,就好像窗体布局一样,然后它就上去了。
上图中,能看到action已经放入工具栏,对象管理器中,QToolBar下面也有了一个节点。这才算连接成功了。再看下面action editer那里,“使用”那一列,才有了对钩。在上面右键的话,也多了一个选项“用于”。
至此,添加QAction完成。在action editer那里的action上面鼠标右键可以转到槽函数,剩下就都知道了。
结束语:
用惯了vs,甚至pb,delphi,还没见过那个界面设计器是这样的。
虽然qt信号槽的方式让我眼前一亮,可以说与“消息事件响应机制”有个明显区别,至少对于我来说也算标新立异,我觉得非常好,用于各种通信太方便了。
但是qt creator刚接触时,太上头了。它对控件的布局也是不同于vs,但是用习惯了还挺好。但是像工具栏、菜单栏、项等,也许它有灵活的用法,但我个人感觉它设计的有些草率了。既然都是部件,都从工具箱开始不好吗?非要搞特殊。
总的来说,相比vc6.0还是友好了许多,也许跟我年龄增长有关。刚毕业那会儿,第一个工作就是让用vc++,其实做下去挺好的。但是当时一看,太上头,因为自己之前尝试用过,如果没人引导,纯自己看书的话,短时间内不好上手。相比vb、pb、delphi要难用。但如果能坚持下来,对程序结构理解会好很多。
总之,qt还是很好用的。纯英文的帮助和社区交流,还是挺好玩的,对学习英语很有帮助。现在的学习环境,比二十年前强太多了。网络昂贵的时代,学东西真费劲,原本很多稍微点拨就开窍的东西,如果自己闷头上,费劲大发了。
像上面提到的qt种种,也许直接先阅读一本综合教材,会少走不少弯路。但是,纯理论学习也要结合实践。或者像我一样,没怎么系统化看过资料,上来就直接用,在不断发现问题的时候再尝试解决,也是一种学习途径。哪种更好就看个人了。
所以,善于在网络分享,贡献自己一份力,会让更多学习者少走弯路。
完结。