我有一个PyQt5应用程序和大多数用Python编写的小部件。我想在C ++ Qt中编写一些小部件以使其更快,然后将其嵌入我的PyQt QMainWindow。
有可能吗?
答案 0 :(得分:4)
您可以使用SIP从python执行在C ++中创建的小部件,在下面的link中我展示了如何执行此操作的示例。
示例的结构如下:
├── 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 强>
%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 强>
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_())
输出:
答案 1 :(得分:1)
您可以使用SIP为C++
代码创建绑定,方式与PyQt
绑定相同。
但是,SIP生成的绑定本身是C++
代码,而PyQt
直接链接到Qt
二进制文件。如果您只是打算将PyQt
代码重写为C++
,那么实现的任何加速都可以忽略不计,因为首先执行的本机python很少。