Back to Blog home

北京、西安Meet Qt技术沙龙问答环节

Published on 星期四 六月 27, 2019 by Richard Lin in qt-blogs-chinese qt-labs-chinese Meet Qt Q&A | Comments

作者:Kenny Zhang

感谢近百位Qt专业开发者参加了我们上周在北京、西安两地举办的Meet Qt技术沙龙活动,按惯例,工程师从众多提问中挑选了六个典型问题做简要回答,希望能解答更多Qt开发者的疑问。

%e5%be%ae%e4%bf%a1%e5%9b%be%e7%89%87_20190627144504

问1:能否介绍下Qt WebEngine?Qt Webkit迁移到Qt WebEngine有哪些需要注意的地方?

答:WebEngine来源于Webkit,Webkit之前主要由苹果和谷歌两个公司贡献代码,但是后来Google推出自己的新分支Blink,即Chromium的内核,WebEngine就是基于Chromium。因为Blink在性能、跨平台等方面的原因,Qt5.4版本开始引入WebEngine,Qt5.6以后,Qt删除了WebKit部分,转向了WebEngine。而且Chromium的跨平台特性、功能以及对H5新特性的支持更好,这也是我们要用QtWebEngine替换QtWebKit的原因。

关于Qt Webkit如何迁移到Qt WebEngine,可以参考Qt官方文档:

https://doc.qt.io/qt-5.12/qtwebengine-platform-notes.html

https://doc.qt.io/qt-5.12/qtwebenginewidgets-qtwebkitportingguide.html

 

问2:Qt如何适配国产操作系统如中标麒麟、锐华、道系统等平台?

答:Qt具备优秀的跨平台特性,能够适配多种国产操作系统,如中标麒麟、锐华(Reworks)、道系统(DeltaOS),并且支持多种CPU架构,如X86/PPC/ARM及龙芯MIPS。对于国产操作系统,Qt专业服务能够提供多种操作系统平台与Qt的适配以及项目的移植服务,有相关需求的朋友可以进一步咨询我们的客户经理了解情况。

 

问3:Qt必须使用system V的IPC吗?

答:Qt 是一个跨平台的应用框架,其进程间通信(IPC)机制当然可以使用所在平台的进程间通信机制,例如Linux下的管道(Pipe)、信号(Signal)、消息队列(Message)、共享内存、信号量(Semaphore)、套接字(Socket),其中包括System V 提供的IPC方式——消息队列,信号量,共享内存;Windows平台上的Message机制、共享内存、文件映射、管道、Socket等。

Qt对一些许多平台共有的IPC机制进行了封装。在Qt应用程序中,提供了以下几个方法来实现进程间通信(IPC):

(1)TCP/IP

跨平台的Qt Network模块提供了网络编程高级类(例如QNetworkAccessManager、QFtp)和一些较底层的类(例如QTcpSocket、QTcpServer、QSslSocket)。

(2)Shared Memory

跨平台的QSharedMemory——共享内存类,提供对操作系统的共享内存的实现。

(3)D-Bus

Qt的D-Bus模块是一种可用于使用D-Bus协议实现IPC的唯一Unix库。它将Qt的信号和槽机制延伸到IPC级别,允许由一个进程发出的信号被连接到另一个进程的槽。

(4)QProcess

跨平台类QProcess可以用于启动外部程序作为子进程,并与它们进行通信。

(5)Session Management

在Linux/X11平台上,Qt提供了会话管理的支持。

 

问4:Qt是否支持自研数据库集成到Qt的SQL驱动中?

答:

Qt提供了两种API用于创建插件:一种是高阶API,用于扩展Qt本身的功能,如自定义数据库驱动,图像格式,文本编码,自定义样式等;一种是低阶API,用于扩展Qt应用程序。如果您想创建自己的SQL驱动并集成到Qt中,可以子类化QSqlDriver和QSqlResult这两个类,并重新实现它的一些虚函数。

关于插件创建请参考:https://doc.qt.io/qt-5/plugins-howto.html

如何添加自定义数据库驱动请参考:https://wiki.qt.io/How_to_write_a_SQLDatabase_Driver

 

问5:Qt可以用来做点云或者其他三维渲染开发吗?是否适合与widget结合开发军工或者工业类应用软件?

答:

Qt支持2D/3D风格的数据可视化呈现,其中Qt Data Visualization模块提供了一种快速响应的、复杂、动态的三维可视化方法,能够支持三维条形图、散点图和曲面图的可视化呈现,内置多种不同风格的渲染主题,可以进行观察视角的调整,其中Q3DScatter 能够支持点云等三维数据的渲染。此外Qt提供了OpenGLWidget窗口控件可以结合OpenGL的功能。Qt也可以加载VTK为支持Qt而提供的QVTKWidget。

 

问6:Qt Creator在编译应用程序时耗时较长,有没有优化方法?

答:

首先,Qt creator只是一个IDE,不是编译器,编译快慢与Qt Creator无关,要看具体使用的是什么编译器。一般来说Windows下就是MinGW的gcc和Visual Studio的nmake,在Windows下推荐使用VS编译器,能够加快编译速度;如果是其它平台,可以尝试LLVM的Clang。

其次,可以配置PRECOMPILED_HEADER,添加预编译头文件(PCH,PreCompiled Headers)支持:

CONFIG+=precompile_header

PRECOMPILED_HEADER=stable.h

最后,可以采用并行编译方式,在.pro里加入下面一行

QMAKE_CXXFLAGS += /MP

同时起多个编译进程并行编译不同的cpp

 

Subscribe to Our Blog

Stay up to date with the latest marketing, sales and service tips and news.