我有一個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