我有一个使用PyQt5编写的应用程序,大部分小部件都是用Python编写的。我想使用C++ Qt编写一些小部件以加快速度,并将其嵌入到我的PyQt QMainWindow中。
这种做法可行吗?
├── configure.py
├── sip
│ ├── AnalogClock.sip
│ └── PyAnalogClock.sip
└── src
├── analogclock.cpp
├── analogclock.h
├── analogclockl_global.h
└── AnalogClock.pro
在src文件夹中,您必须创建小部件库。
在sip文件夹中,您必须放置要公开的类的结构:
AnalogClock.sip
%Import QtGui/QtGuimod.sip
%Import QtWidgets/QtWidgetsmod.sip
%If (Qt_5_0_0 -)
class AnalogClock : public QWidget{
%TypeHeaderCode
#include "analogclock.h"
%End
public:
AnalogClock(QWidget *parent /TransferThis/ = 0);
protected:
virtual void resizeEvent(QResizeEvent *);
virtual void paintEvent(QPaintEvent *e);
};
%End
PyAnalogClock.sip
的翻译是:PyAnalogClock.sip
%Module(name=PyAnalogClock, call_super_init=True, keyword_arguments="Optional")
%DefaultMetatype PyQt5.QtCore.pyqtWrapperType
%DefaultSupertype sip.simplewrapper
%Include AnalogClock.sip
configure.py
是配置项目编译的脚本,如果您遇到任何问题,您必须修改某些路径(已在Linux中进行了测试)。
然后通过执行以下命令进行编译:
python configure.py
make
sudo make install
执行上述操作后,会生成一个名为"modules"的文件夹,其中包含动态库文件,在本例中为PyAnalogClock.so
。我们需要将这个文件放在源代码文件夹中。
.
├── main.py
└── PyAnalogClock.so
main.py
=>主程序.py
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyAnalogClock import AnalogClock
if __name__=="__main__":
import sys
a=QApplication(sys.argv)
w=AnalogClock()
w.show()
sys.exit(a.exec_())
输出:
C++
代码创建绑定,就像PyQt
绑定一样。C++
代码,在PyQt
的情况下,它们直接链接到Qt
二进制文件中。如果您只是打算将PyQt
代码重写为C++
,那么实现的任何加速都将是微不足道的,因为首先几乎没有执行本地python代码。
make
步骤通过了,但是当我尝试运行Examples.main.py
时,它会出现错误:ImportError: libMyLabel.so.1:无法打开共享对象文件:没有那个文件或目录。 - Felix