PythonQt实现了C++对象和Python脚本的双向调用,是实现Qt与Python互操作和嵌入式脚本的重要方式。
PythonQt的原始工程在:http://pythonqt.sourceforge.net/。这个项目来自于Mevis,一个功能强大的医疗图像处理软件。可能是考虑到产品级软件的稳定性,里面用的是Qt4.6.2,python用的2.6。而现在最新的Qt主流版本是5.4,Python已经是3.4.2了。下面我们将在最新的Mac OS上进行这些最新版本的编译,请扶好坐稳!!!
Yosemite没有Python3的缺省安装,直接到www.python.org去下最新的版本,安装完毕。
然后到http://www.qt-project.org下载Qt5.4的对应版本,安装完毕。
现在,打开Qt Creator,载入PythonQt.pro项目,进行配置,选择Desktop XXX Clang_64,等待...
结果等来了的是一大堆警告和几个莫名其妙的错误,反正就是不成功...
开始折腾,卸载...安装...设置参数...环境变量...没有任何效果。
仔细分析了一下错误信息,发现里面都是报的“protected...”信息。然后,找到原始的Qt文件,把这些成员变量(函数)的前面都加上public:,再次编译,通过。
如下所示:
//Add "public" by openthings. This got error by PythonQt,change to public member. public: enum Extension { UserExtension = 0x80000000 };
但是又出现新的类似错误,如法炮制。全部修改完后,再编译,通过,运行,通过,喔耶!!!
因为之前同样的代码在Linux没有任何问题,基本搞清楚问题的原因所在:在gcc上没有检查对于protected的enum变量没有限制外部成员访问,而clang进行了严格的限制,导致编译不通过。
现在,把Qt的代码的enum的成员需要外部访问的改为public修饰符,就全部OK了。但是因为改的是Qt的代码,需要备份起来,要不以后一更新,又会出问题了。
对clang编译器(这个做正确了但是闯了祸的家伙!)进一步感兴趣的可以参考这里:http://www.tuicool.com/articles/u6jMb2N。