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

标签 python c++ pyqt pyqt5

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

这可能吗?

最佳答案

您可以使用 SIP 从 python 中执行用 C++ 创建的小部件,在以下 link 中我展示了一个如何做到这一点的例子。

示例结构如下:

├── configure.py
├── sip
│   ├── AnalogClock.sip
│   └── PyAnalogClock.sip
└── src
    ├── analogclock.cpp
    ├── analogclock.h
    ├── analogclockl_global.h
    └── AnalogClock.pro

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

在 sip 文件夹中,您必须放置要公开的类的结构:

模拟时钟.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

主.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_())

输出:

enter image description here

关于python - 是否可以将 C++ 小部件嵌入到 PyQt 应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44258808/

相关文章:

Python:环境变量未更新

C++ shared_ptr std::bind 和 std::function

c++ - g++ undefined reference 在非常简单的例子中

python - 移动 QSlider 到鼠标点击位置

qt - 在上下文管理方面,QFile.open() 的行为与 Python 的 open() 类似吗?

python - hadoop流作业在python中失败

python - discord.py 中的邀请命令(通过 ID 邀请用户到服务器)

python - Django 支付处理

c++ - Natty Narwhal 和 Oneiric Ocelot 之间共享对象链接的差异

python - 在同一事件循环中运行 Qt 和 Websockets 服务器