2017-05-30 97 views

回答

1

你可以使用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_()) 

输出:

enter image description here

+0

谢谢你的回复。我试图建立它,但它失败了。 python3 configure.py通过,但'make'步骤说它找不到库MyLabel – Felix

+0

什么是您的操作系统? – eyllanesc

+0

你完全下载了整个github项目吗? – eyllanesc

1

您可以使用SIP为您的C++代码创建绑定,与创建PyQt绑定的方式相同。

但是,由SIP生成的绑定本身代码为C++,并且在PyQt的情况下直接链接到Qt二进制文件中。如果你只是打算重写PyQt代码为C++,那么实现的任何加速将可以忽略不计,因为首先执行的本地python很少。

相关问题