背景
最近发现我们的客户端程序(Qt编写),在银河麒麟_V10 + arm64平台下打印文件时,无法选择设置好的网络打印机,但同一套代码在windows下是没问题的。
解决思路
1、网上搜索相关问题,无果。
2、查看帮助文档,了解到Qt在Unix系统下,是通过cups实现打印的,大概是把打印的内容保存成pdf,然后发送到系统的打印程序(Unix下应该是lp,我也是一知半解,不过多介绍,以免误导读者)。
3、查看源码,发现Qt中,对打印的支持是以插件的形式提供的,windows下是windowsprintersupport.dll,Linux下是libcupsprintersupport.so。
有效办法
将libcupsprintersupport.so放到程序安装目录下的plugins/printsupport文件夹下。
将libcups.so.2放到程序安装目录下的lib文件夹下(当然这个文件夹不是固定的,具体要看设置的动态库查找路径)
结语
正常情况下,是不会有这个问题的,因为在打包的时候,这些库都会打进来,但凡事也总会有一些意外。
这个方法也适用于Linux或其他基于Linux的国产化系统,前提是已经在系统上设置好了打印机