当你的产品决定使用C++进行Windows客户端开发时,也许QT是非常适合您产品的C++开发框架,框架选型时不容错过。其跨平台、功能丰富、文档齐全,稳定、已广泛应用于许多产品。
笔者最早使用QT是因为其跨平台,可以支持产品在Windows/Mac平台上运行,使用过程中发现QT框架的强大,相比以前自己找各种各样开源库编译/封装实现,效率大增,于是在后来的产品不要求跨平台又决定使用C++开发时,我都会优先考虑使用QT框架。接下来,我将谈谈QT对开发过程中常用的能力支持情况。
QT支持跨平台
如果你的产品需要支持Windows/Mac/Linux平台,QT是你的不二之选。可以想象下使用C++开发支持这三个平台的桌面应用,难度有多大。当然,前提是你已经决定使用C++作为开发语言,而不是Java/Web。
QT的强大界面库/国际化
QT Designer工具提供所见即所得的界面开发。工程编译时自动化生成UI的逻辑代码,与业务逻辑代码独立。提供丰富的控件库,强大的控件扩展能力,支持类似CSS的样式,完善的帮助文档,很容易在网上搜索到遇到的问题的答案。
QT对多分辨适配也给予支持,如果你要适配4K屏,设置一个比例因子就可以(注意不要绝对布局)。
QT提供对国际化的支持,代码中按照规范引用字符串(比如 tr("hello")),编译的时候就会将这些字符串生成到一份语言文件,QT提供相应的工具用来查看/编辑/编译这份语言文件,运行时根据系统语言设置对应语言文件。
QT的WebEngine
虽然选择使用C++作为产品开发的语言,但是对于性能要求不高的功能还是可以选择使用Web开发,也就是混合开发模式,于是需要提供Web的运行环境。QT的WebEngine是基于Chromium内核封装实现,QWebEngineView是QT UI框架的一个控件,可以用于加载Web站点,QWebChannel提供Web与Native之间通信通道。不使用QT进行混合开发,就要自己引入开源CEF框架,增加Web与Native之间通信通道,是一笔不小的工作量,而且需要对CEF较为熟悉。
QT的网络编程
Network模块支持协议包括:TCP、UDP、SCTP、HTTP、HTTPS、SSL(X509)、DNS,也支持WebSocket。
QT支持数据库/Json/Xml
客户端开发常用的sqlite数据库,数据交换协议Json/Xml,QT也都支持。
QT强大的信号槽机制
QT信号槽机制本质是一种回调的实现,A对象定义信号、触发信号,B对象定义槽,连接信号,当A对象触发信号时,B对象的槽就会被调用。同一个信号可以连接多个槽,实现一对多的调用。信号与槽连接时可以指定同步调用/异步调用,当触发信号的线程与实现槽的线程不同时异步调用保证槽在正确的线程中运行,这对多线程安全至关重要。
丰富第三方开源库(基于QT实现)
当你的产品开发需要的能力,QT未提供的时候,一般在github上也能找到开源库。笔者开发过程中就用到libgitlevtbus库实现事件总线,用到qtpdfium实现pdf文档的读取。