Study PyQt from beginning 之 4-Windows 环境下的C语言封装

来源:互联网 发布:飘零网络验证系统 编辑:程序博客网 时间:2024/06/13 06:31

杂七杂八,记录一下算是备忘,另,发现有网络爬虫再复制这些帖子,还是留个名字吧。----by Hyman


环境准备,没有vs编译器,于是需要安装mingw,也很简单,下载mingw-get-setup.exe,选择base安装,编译器只需要gcc即可,系统默认会安装msys。安装完毕后把x:\mingw\bin和x:mingw\msys\bin两个目录都放进系统环境变量path里面

Upd: 实际上,只选择gcc,就是在 "MinGW Installtion Manager"里面的Basic Setup里面,只选择mingw-base和mingw-gcc-g++两项即可。msys不用安装,那个msys里面自带了一个不同版本的make,比mingw32-make版本低一点,为了避免麻烦,不装msys了。

如果非要使用习惯的unix之类的命令行,有个install-alias.bat,就是把指定的一个目录放进注册表里面,相当于直接加到系统的path里面,然后在这个目录里写xx.bat,典型的cp.bat内容为

@echo off
copy %*

依法泡制即可。


1、典型的qt的pro文件,用于qmake生成makefile,格式和unix不太一样。

SOURCES = btc.c
CONFIG += qt warn_on release
INCLUDEPATH += "D:\\Python33\\include"
LIBS += -LD:\\Python33\\libs -LD:\\Python33\\LIB  -lpython33

主要是 INCLUDEPATH 对于windows路径,需要用引号引上,而且,双斜杠,貌似可以用单反斜线/。  LIBS 的路径不用加引号,-lpython33,要确认在上述lib目录里应该有libpython33.a文件才行。


qmake 用的pro文件,博大精深。最简单的用法,对于命令行调试c语言来说,需要有很多的printf输出,就需要在 CONFIG一行再加上 console字样, 变成

CONFIG += qt warn_on release console

这样,习惯printf("%s  %d\n",__FILE__,__LINE__);的c语言老油子们,又可以跟unix调试的方法一样了。




2、用qmake生成Makefile

x:\...\qmake -spec win32-g++ xxx.pro 这里 -spec参数是指定编译器,参数可以在qt\4.8.5\mkspecs目录里面找到,每个目录名都是不同的编译器选项,涉及到win32的有

2014/02/07  05:56    <DIR>          win32-borland
2014/02/07  05:56    <DIR>          win32-g++
2014/02/07  05:56    <DIR>          win32-g++-4.6
2014/02/07  05:56    <DIR>          win32-icc
2014/02/07  05:56    <DIR>          win32-msvc2003
2014/02/07  05:56    <DIR>          win32-msvc2005
2014/02/07  05:56    <DIR>          win32-msvc2008
2014/02/07  05:56    <DIR>          win32-msvc2010
2014/02/07  05:56    <DIR>          win32-msvc2012


3、c语言封装调用python3,和调用python2略有不同,可以在官方网站找到文档稍加修改即可。如果直接用python2的版本,是无法编译通过的。

编译使用mingw32-make -f Makefile


4、eric5编译出来的pyqt4的ui文件,直接运行会出错,主要是这几句



from PyQt4 import QtCore, QtGui


try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

。。。。

每个Ui_xxx.py文件的前面都是这么几句。但是python3的文档说了,String简化了,据说python3的目的就是要简化python2,于是QString 会报不存在的属性。

处理办法有2个:

  • 一是用sip,原理是指定QString是属于python2的api,在前面加上

import sipsip.setapi('QString', 1)
即可,系统运行时,把QString作为python2的api,也可以运行。


  • 二方法是最简单,上述几句删掉3句,直接使用

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:

def _fromUtf8(s):
    return s

就行了。



0 0