03 PyQt與C Qt的一些比較

2021-10-02 14:38:07 字數 3143 閱讀 5762

目前pyqt5可以實現c++/qt的幾乎全部邏輯,現在做一下兩者的比較,方便對pyqt的理解。

類呼叫ui檔案編譯

簡單自定義類的**結構

訊號槽使用

#include

intmain

(int argc,

char

*ar**)

import sys

if __name__ ==

'__main__'

: w = qwidget(

)# 建立qwidget物件

w.show(

)# 顯示qwidget))

c++/qt

pyqt5

使用uic.exe生成ui_***. h

使用pyuic5.exe生成對應的py檔案

在qtcreator中建立乙個ui檔案,這裡直接使用自帶的預設form template,得到"dialog.ui"

使用qtcreate進行編譯

// 根據ui檔案自動生成ui_dialog類,並實現setupui的方法來進行介面排布。

class

ui_dialog

// setupui

void

retranslateui

(qdialog *dialog)

// retranslateui

};

使用pyqt5進行編譯

cd命令到「dialog.ui」檔案路徑下,

使用命令 pyuic5.exe -o ui_dialog.py dialog.ui

命令是將dialog.ui檔案利用pyuic5.exe編譯,並生成ui_dialog.py檔案,該檔案會自動生成ui_dialog的類。

開啟ui_dialog.py,可以看到經過編譯後的**

from pyqt5 import qtcore, qtgui, qtwidgets

class

ui_dialog

(object):

defsetupui

(self, dialog)

: dialog.setobjectname(

"dialog"

) dialog.resize(

400,

300)

self.buttonbox = qtwidgets.qdialogbuttonbox(dialog)

self.buttonbox.setgeometry(qtcore.qrect(30,

240,

341,32)

) self.buttonbox.setorientation(qtcore.qt.horizontal)

self.buttonbox.setstandardbuttons(qtwidgets.qdialogbuttonbox.cancel|qtwidgets.qdialogbuttonbox.ok)

self.buttonbox.setobjectname(

"buttonbox"

) self.retranslateui(dialog)

self.buttonbox.accepted.connect(dialog.accept)

self.buttonbox.rejected.connect(dialog.reject)

qtcore.qmetaobject.connectslotsbyname(dialog)

defretranslateui

(self, dialog)

: dialog.setwindowtitle(_translate(

"dialog"

,"dialog"

))

#include

#include

"ui_mywidget.h"

class

mywidget

:public qwidget

;mywidget::

mywidget

(qwidget *parent)

:qmainwindow

(parent)

form ui_mywidget import ui_mywidget

class

mywidget

(qwidget)

def__init__

(self)

:super()

.__init__(self,parent=none)

self.__ui = ui_mywidget(

)# 建立介面類作為私有函式

self.__ui.setupui(self)

# 建立ui介面

if __name__ ==

'__main__'

:# 測試**,在執行當前py檔案時會進入

w = mywidget(

)# 建立mywidget物件

w.show(

)# 顯示qwidget))

專案c++/qt

pyqt5

訊號定義

包含兩個訊號。1、訊號帶乙個str引數。2、訊號帶int和str兩個引數

訊號利用pyqtsignal宣告,並進行引數宣告

槽定義

在普通成員函式上增加q_slots標識

使用裝飾器(無過載可不需要)來修飾成員函式

連線qobject::connect(sender,signal(signal()),reciever,slot(slot()))

sender.signal[param].connect(reciever.slot)

此處只簡單對比下兩邊訊號槽的語法,後續章節再深入下pyqt訊號槽的語法及應用。

typedef與define的一些比較

1 define是預處理指令,在編譯預處理時進行簡單的替換,不作正確性檢查,不關含義是否正確照樣帶入,只有在編譯已被展開的源程式時才會發現可能的錯誤並報錯。例如 define pi 3.1415926 程式中的 area pi r r 會替換為3.1415926 r r 如果你把 define語句中...

C 與C 一些比較

1.在c 中不需要區分標頭檔案與實現檔案,c 為了和其他cpp中的函式方便的做互動不得不寫乙個標頭檔案來做型別宣告。2.c 語言本身提供了反射機制支援 而c 並不支援 像c 中propertygrid這樣的東西,在c 中實現也是乙個比較麻煩的事情 rpc這樣的東西在有反射系統的情況下,實現和使用都要...

web server的一些比較

一,lighttpd簡介 netcraft做的資料調查曾顯示,今年一月份全球使用lighttpd的 為170,000,二月份這個數字達到了7000,000,在短短的乙個月內驚人地增長了400 在這些 中,包括youtube wikipedia和meebo等。而且目前為止,使用lighttpd的 仍在...