[日记]2013年11月12日 QT4迁移到Qt5

把项目从Qt4迁移到Qt5,遇到了几个小问题

  1. QTextCodec::setCodecForTr()
    这个函数已经没有了,使用
    QTextCodec::setCodecForLocale(QTextCodec * c)
    指定编码就可以。可是原来的项目用是GB18030,现在改成utf-8了,于是就连源文件都有了两种编码格式。。。我有种不详的预感这样早晚会粗事的 >_< 
  2. 原来的QIconEngineV2类取代了QIconEngine类,于是需要实现一个纯虚函数clone()。不过我不还太理解这样的设计思想是什么 =  =总之这个IconEngine类已经非常强大了。
  3. 直接运行项目出现了main函数重定义的报错
    multiple definition of `qMain(int, char**)'
    原来以为是因为一个项目中有多个子项目的问题,单独打开子项目,还是不行,给跪了。。。回头看了看.pro文件。。。尼玛的main.cpp居然包括了两遍。。。终于解决,呼呼。
  4. 运行出来的程序不出所料地出现了字符编码格式不对的问题T_T,每次遇到这种情况,我都会想到DiveIntoPython里那句“字符编码抬起了它腌臜的头“。于是用Pyhon写了脚本转一下吧(其实直接用记事本转也许更快一点)。出于个人喜好,我喜欢在Eclipse下面装了PyDev写Python脚本,安装步骤可以看这篇文章,并用python的CLI作为辅助。
    # !Python2.7.5
    def codecConvert(f, encoding_old, encoding_new='utf-8'):
        try:
            with open(f) as fin:
                content = fin.read().decode(encoding_old)
        except UnicodeDecodeError:
            pass
        else:
            with open(f, mode='w') as fout:
                fout.write(content.encode(encoding_new))
    Python3的
    # !Python3.3
    def codecConvert(file, encoding_old, encoding_new='utf-8'):
        try:
            with open(file, encoding=encoding_old) as fin:
                content = fin.read()
        except UnicodeDecodeError:
            pass
        else:
            with open(file, encoding=encoding_new, mode='w') as fout:
                fout.write(content)
    
    这么简单的转换花了一个下午才搞定,说多了都是泪T_T,关键在于一开始没理解Python2和3在读文件和字符编码上的变化。
    Dive Into Python里说到在Python3,所有的字符串都是使用Unicode编码的字符序列。我的理解是字符串的内部储存方式就是Unicode,在读文件时指定文件的编码,这样Python就能读取文件并转成Unicode,写文件时也一样。
    而Python2中,分str类和unicode类,字符串读进来的时候自带了编码,通过str的decode()函数可以解码,转化成unicode类,unicode用encode()函数转化成str,而Python3中,encode()用于把字符串编码成字节,decode相反
     Python2Python3
    str任意编码格式unicode
    unicodeunicode格式没有
    encodeunicode转strstr转字节
    decodestr转unicode字节转str
    http://www.blogjava.net/pattern/archive/2008/09/09/227971.html 和 http://blog.chinaunix.net/uid-12774292-id-58349.html 和 http://blog.csdn.net/sunyonggao/article/details/6666121 有所介绍,不过要分清楚他们是说python2还是python3,下次不能再掉进去了!
  5. 更大的变化是在对OpenGL的封装上,这篇文章有一些简单的介绍,这个博客更加专业。这些封装使得QT拥有了更好的平台独立性和更慢的速度。。。
    对于我来说首先要让原来的程序能运行起来。修改了一些include的路径之后程序运行了,但在OpenGL渲染区域里漆黑一片。。。然后看到网上说如果下载的是编译好的Qt5安装包可能不支持native OpenGL,需要自己编译源代码,吓了我一大跳,赶紧把Qt例程里的Hello GL运行了一下,正常运行,说明问题不大,应该是我代码的问题。so,明天再搞吧。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值