2019-11-08 【RCViewer】使用QT开发应用的正确姿势

RCViewer最终选择QT作为应用框架,到今天为止,我认为这一次技术选型并没有错,一半来自于我对现有开发进度与实验结果的掌控和满意度,另一半来自于我惊喜的发现,最伟大的先驱竟然也是QT开发的,这一下子背书了QT可以开发大型应用的能力,所以QT就这样成为了正选。

然而是不是没有遗憾?早期在QT上做UI,实在是只知道在.ui文件中拖拖拖,然后一顿猛调,可是跑起来后返现,这里有一点点歪,那里也有一点点不准确。所见即所得的编程方式再一次极大降低了应用开发的门槛,码兽们已经不需要知道组件是怎么画出来的,组件可以响应的按键事件是怎么被系统抛出来,然后一路不迷失直奔目标到达组件这里的,只需要拖动组件,添加信号,或者像MFC一样双击,填写callback。但所见即所得的编程方式,也使得在需要对应用展示做精细化调整时,从内心出发的无能为力。

所以QT引入了qss,这实在是福音,在.ui文件中摆放控件的大概位置,不需要理会控件的具体样式与内容,也不需要理会控件的响应式交互,然后到你的qss,定义控件的样式,与响应式交互,简直完美。可是.ui与qss的组合也有大缺点。qss是一个css的语法模仿,然而这个语法模仿的意思,指的是qss仅仅语法模仿css,在使用方式上,qss与css有相当大的区别(也可能是我没有解锁qss的正确玩法)。css中的继承体系,引用体系,在qss中完全没有体现,qss只是提供了一种用配置文件定义.ui文件中控件样式的方式。控件样式中频繁会使用的常量如颜色、字体等,qss中并不能做常量定义,何其悲伤,当我想修改一种字体或者某几个属性共用的属性,不得不修改多个地方,以保证展现上的协调。我想QT大概是想以QWidget的继承体系,覆盖qss中的继承体系,然而对于习惯与css的码兽来说,这太隐晦了。

.ui和qss的结合还有致命缺陷:无法只做层叠UI。.ui中可以添加DockWidget,然而此Dock并不表示我可以浮在任何人上方不占用parent的空间,此Dock是要占用空间的,此Dock会将parent中的其他控件挤压,然后把自己固定在边上。这对于只做像Word的菜单栏一类的应用,确实是利好,然后我们还有很多浮动的弹出菜单,既需要Dock在边上,又不能占用parent的空间哇!所以在这种情况下,C++出场了。

所以用QT开发应用的正确姿势应该是:.ui做大概布局,qss定义控件样式,C++实现复杂效果。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 标签(空格分隔): 移动应用 跨平台 混和开发 Flutter 移动应用跨平台开发框架,根据其原理,主要分为三类:...
    黄昭鸿阅读 4,683评论 0 2
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,611评论 0 7
  • 灯火总是在黑夜里才会更加明亮!
    奇门杂货铺阅读 35评论 0 0
  • 一蓬骆驼刺 两座沙丘 三四个盐碱滩 一些游人纷纷睡去 你依然固执地守望窗外 一列白杨 随风摇摆 潇洒出一片动感地带...
    弱水一杯阅读 311评论 3 11
  • 只是橱窗里的一个模特 却总是幻想像那夜里的飞蛾 有一天, 自己也能奋不顾身地去爱火 只是橱窗里的一个模特 穿着华丽...
    云尘心阅读 291评论 0 3