• 6240阅读
  • 1回复

pyqt4扩展:添加qtcanvas模块 [复制链接]

上一主题 下一主题
离线myer
 

只看楼主 倒序阅读 楼主  发表于: 2006-04-24
本文最初blog:

http://blog.csdn.net/myer/archive/2006/04/24/675434.aspx


Qt4是一个gui库,相比Qt3,在console程序的编写方面有了很大的改进。python是一个面向对象的脚本解释语言,程序非常简洁优美,二者结合必将带来效率的极大提升,python比较适合快速开发,程序测试,等等

python支持对于c/c++的扩展,例如使用swig,在安装了pyqt4后,当然就使用pyqt4使用的sip,简单、对qt的支持也非常好。

先看一个简单的例子:(本例子来源于sip文档)
头文件word.h:

class Word {
  const char *the_word;

public:
  Word(const char *w);

  char *reverse() const;
};
编写sip文件:
word.sip

%Module word 0

class Word {

%TypeHeaderCode
#include <word.h>
%End

public:
  Word(const char *w);

  char *reverse() const;
};
就这么简单,你可以手动的使用sip命令来生成cpp文件,当然sip模块已经包含了更简单的方法:
编写配置模块:configure.py

import os
import sipconfig
build_file = "word.sbf"
config = sipconfig.Configuration()
os.system(" ".join([config.sip_bin, "-c", ".", "-b", build_file, "word.sip"]))
makefile = sipconfig.SIPModuleMakefile(config, build_file)
makefile.extra_libs = ["word"]
makefile.generate()

OK,运行configure.py看看吧,makefile已经生成。下面仅仅make即可。然后你就可以在自己的py程序里使用word模块了。

Qt的canvas模块是个很实用的模块,随着Qt4.0,4.1,虽然trolltech一再宣称下一版本发布,至少到目前Qt4.12还没有支持,而其发布的qtcanvas也只是一个过渡产品,在Qt4下面效率据说不怎么样。

但不管怎么样,先把qtcanva安装,并且通过sip与python绑定,由于目前PyQt4还不完善,文档更是匮乏,不过还好参考Qt3的PyCanvas,很快就编译完了。

0、前提:安装Qt4,python2.4,sip4,PyQt4,并且把qtcanvas编译为静态库
1、编写qtcanvas.sip,参照Qt3的sip文件,根据错误提示,修改部分内容即可
2、编写configure.py,由于sip自带的Qt的例子是还是针对Qt3的,所以更改部分内容:
    qt_sip_flags = config.pyqt_sip_flags
    makefile = pyqtconfig.QtGuiModuleMakefile (...)
    makefile.extra_libs = ["qtcanvas"] #提供包装的qtcanvas.lib
3、OK,运行configure.py,   make. qtcanvas.pyd(.so)产生了
4、运行make install或者copy qtcanvas.pyd到适当的目录即可。

然后马上写个例子来测试:

import sys
from PyQt4 import QtGui, qtcanvas
app = QtGui.QApplication(sys.argv)
canvas = qtcanvas.QtCanvas(800, 600)
cview = qtcanvas.QtCanvasView(canvas)
r1 = qtcanvas.QtCanvasRectangle(100, 100, 100, 100, canvas)
t1 = qtcanvas.QtCanvasText('hello world!', canvas)
r1.show()
t1.show()
cview.show()
sys.exit(app.exec_())

OK,窗口出现了,画了个矩形,还有一个‘hello world!’的文本......




Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=675434
[ 此贴被XChinux在2006-04-24 21:37重新编辑 ]
http://user.qzone.qq.com/56430808
离线acestrong
只看该作者 1楼 发表于: 2007-03-20
呵呵,现在pyqt4里已经有类似的模块了,在qt4中已经用QGraphics*代替QCanvas*了,最近正在学习~~
快速回复
限100 字节
 
上一个 下一个