使用QT做跨平台编程

原创 2011年01月10日 21:28:00

前两周,各种课程设计和实验,各种团队活动占据了我几乎所有的时间,睡觉都没啥时间,更不用说写博客了。

 

今天下午刚刚投出高频课设的PCB,暂时得以清闲,赶紧来写写博客,待我整理完微机原理的课设,后面的课设和实验也该总结了~~

 

QT,是我最近一直在使用的编程框架,非常便捷和强大~不但封装了各种复杂的系统操作,而且非常容易实现跨平台的C++编程。

 

QT的程序,一般来说,只要不是跟系统直接相关的程序,都能极为顺利的实现跨平台,但是事情总有些不顺的地方,偶尔,切换平台以后,它会DT的出现各种错误,这其实是我还不甚了解QT造成的,下面,我还是基于之前的微机原理课设,说说QT中这么几种阻碍跨平台的情况。

 

QT工程的跨平台问题

在Windows下全部编译通过后,移植到Linux下(感谢葆光的帮助),发现出现了文件未找到的错误,经检查,发现是lib文件的问题。

 

 

lib文件是编译过程中生成的中间文件,在Windows下的格式是“xxx.lib”,而我在pro文件中指定lib文件时使用的如下方式:

LIBS    += dian_matrix_libd.lib

后来发现,这样的写法是非常不具有跨平台特性的。可以说是硬编码,因为Linux平台下的lib文件是xxx.o的形式,这样看来,直接指定名称及后缀是非常不可取的。

 

避免方法:使用如下形式:

LIBS    += -ldian_matrix_libd

QT是个跨平台框架,自然会提供全套的跨平台服务,-l前缀是QT工程文件中表征lib文件的标记,加上这个前缀,QT工具会自动寻找对应lib文件,完成跨平台的任务。

 

针对这个问题,我想,在使用一个工具时,应该了解它的设计宗旨,如果某个功能在它的宗旨之内,而这个工具又是一个优秀工具的话,它一定会以某种形式提供这个功能。

 

编码的跨平台问题

在Linux系统下编译完成后,发现运行结果异常,表现为汉字显示的乱码,大致如下图所示:

之前在Windows平台下其实也遇到过类似问题,通过VS调试后发现是编码错误,因为HZK16文件是基于ascii码编制的字库文件,使用如下方式获取文件的偏移量:

 

然后使用随机读取的方式获取文字点阵信息。

 

这种方法严重依赖字符的编码方式,只能使用ascii编码才能正确访问,wstring使用 unicode编码,ubuntu下使用utf-8编码,造成了显示乱码的现象。

 

解决方案:

使用QT库提供的QTextCodec类完成各类编码的转换工作,使其统一转换成“GB18030”编码方式,就可以正常的访问汉字字模信息了。

住:此部分两张图片为Windows下的截图,只为更清晰的说明,不是证明。

 

---------------------------------------其他跨平台问题---------------------------------------------

文件路径问题

在Linux下运行编译结果时,发现找不到HZK16文件,但是明明已经放在目录下了。经分析,最终确定是文件路径的分隔符“/”和“/”的问题。

使用QDir::toNativeSeparators函数可以解决此问题。

 

注:这个问题是经常出现的,非常让人烦恼,最近的编程中,发现QT含有QDir, QFile, QFileInfo 等多种类支持很多的文件操作,几乎将所有的文件操作(包括文件名、路径、目录的获取)封装起来,非常容易实现跨平台编程。

串口端口问题

在Windows下使用的是COM1~COMn的形式,而Linux下使用的ttySn的形式,如何编写跨平台的程序?

目前为止,我还没有找到一个非常好的方式,只是使用了条件编译的方式来限定不同的字符,如下:

 

 

 

OK,在微机课设中,我遇到的跨平台问题大概就这么些了,将来若再遇到棘手的问题,一定会贴上来供大家分享的,嘿嘿~~

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Qt实现软件从Windows到Linux跨平台

Qt,面向C++图形界面的一种架构,对于GUI有很好的扩展,通过近一个月的学习和摸索,终于实现了Windows下的软件代码移植到Linux,实现了软件的跨平台。这其中走了不少弯路,遇到很多问题,主要是...

Qt 和MFC对比及Qt跨平台优势

一.Qt的优势: 1.跨平台 2.signal-slot机制太漂亮了,与MFC相比,其非窗体类也支持该机制,这点设计者的想法让人佩服,并且由于其非窗体类也支持该机制,所以其很多用法让人感觉眼前一...

Qt跨平台开发环境搭建

Qt跨平台开发环境搭建   1.     背景介绍 Qt是一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者丰富的图形用户界面所需的所有功能。而且,Qt很容易扩展,并且允许真...

请使用Qt自带的宏来区分操作系统跨平台源码(★firecat推荐★)

#if  defined(Q_OS_WIN32)       p->start("cmd.exe", QStringList()  #elif defined(Q_OS_LINUX)        ...

Qt中路径问题一般解决办法

Qt中路径问题的产生一般发生在在跨平台编译的时候,由于不同系统对于路径的表示不同,造成了一种现象就是在某一个系统上顺利执行的一段代码在另一个系统上却无法执行,甚至出错。   我遇到的问题就是在li...

Qt工程文件pro资料,qmake高级概念,创建跨平台编译工程

操作符 到目前为止,你已经看到在项目文件中使用的=操作符和+=操作符。这里能够提供更多的可供使用的操作符,但是其中的一些需要谨慎地使用,因为它们也许会比你期待的改变的更多。 “=”操作符 这个操...
  • li_hai
  • li_hai
  • 2012-07-20 22:31
  • 4114

Qt核心机制与原理

★了解Qt和C++的关系 ★掌握Qt的信号/槽机制的原理和使用方法 ★了解Qt的元对象系统 ★掌握Qt的架构 ★理解Qt的事件模型,掌握其使用的时机信号与槽、元对象系统、事件模型是Qt机制的核...

为什么选择QT进行跨平台图形编程

转载自:http://www.tuenhai.com/wei-shen-me-qt-bian-cheng/ 为什么选择QT进行跨平台图形编程 QT GUI 库设计精良,...

跨平台编程的利器—Qt:概述

Qt是什么,这里就不说了。以前只读过关于它的一些新闻,总体的印象是:它是一个C++语言的跨平台的编程库,最擅长做UI。最近因为项目上的需要,所有工作都必须转移到跨平台上来,因此对跨平台的东西就特别关注...
  • guxch
  • guxch
  • 2012-06-12 17:17
  • 1945
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)