我有一个PyQt5应用程序和大部分用Python编写的小部件。我想在C++ Qt中编写一些小部件以使其更快,然后将其嵌入到我的PyQt QMainWindow中。是否可以将C++构件嵌入到PyQt应用程序中?
可能吗?
我有一个PyQt5应用程序和大部分用Python编写的小部件。我想在C++ Qt中编写一些小部件以使其更快,然后将其嵌入到我的PyQt QMainWindow中。是否可以将C++构件嵌入到PyQt应用程序中?
可能吗?
你可以使用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的文件夹,里面是动态库Y,在该示例中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_())
输出:
您可以使用SIP为您的C++
代码创建绑定,与创建PyQt
绑定的方式相同。
但是,由SIP生成的绑定本身代码为C++
,并且在PyQt
的情况下直接链接到Qt
二进制文件中。如果你只是打算重写PyQt
代码为C++
,那么实现的任何加速将可以忽略不计,因为首先执行的本地python很少。
谢谢你的回复。我试图建立它,但它失败了。 python3 configure.py通过,但'make'步骤说它找不到库MyLabel – Felix
什么是您的操作系统? – eyllanesc
你完全下载了整个github项目吗? – eyllanesc