是否可以将 C++ 小部件嵌入 PyQt 应用程序?

Fel*_*lix 5 c++ python pyqt pyqt5

我有一个 PyQt5 应用程序和大多数用 Python 编写的小部件。我想用 C++ Qt 编写一些小部件以使其更快,然后将其嵌入到我的 PyQt QMainWindow 中。

是否可以?

eyl*_*esc 9

您可以使用 SIP 来从 python 执行在 C++ 中创建的小部件,在以下链接中,我展示了如何执行此操作的示例。

示例的结构如下:

??? configure.py
??? sip
?   ??? AnalogClock.sip
?   ??? PyAnalogClock.sip
??? src
    ??? analogclock.cpp
    ??? analogclock.h
    ??? analogclockl_global.h
    ??? AnalogClock.pro
Run Code Online (Sandbox Code Playgroud)

在 src 文件夹中,您必须创建小部件库

在 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
Run Code Online (Sandbox Code Playgroud)

PyAnalogClock.sip

%Module(name=PyAnalogClock, call_super_init=True, keyword_arguments="Optional")
%DefaultMetatype PyQt5.QtCore.pyqtWrapperType
%DefaultSupertype sip.simplewrapper
%Include AnalogClock.sip
Run Code Online (Sandbox Code Playgroud)

configure.py 是配置项目编译的脚本,有问题一定要修改一些路径(Linux已经测试过)

然后通过执行以下命令编译它:

python configure.py
make 
sudo make install
Run Code Online (Sandbox Code Playgroud)

执行上一个时,它会生成一个名为 modules 的文件夹,里面是动态库,在示例中PyAnalogClock.so,我们将此文件放在源代码的文件夹中:

.
??? main.py
??? PyAnalogClock.so
Run Code Online (Sandbox Code Playgroud)

主文件

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_())
Run Code Online (Sandbox Code Playgroud)

输出:

在此处输入图片说明