Qt/PyQt 概談

其實,PyQt的實際使用經(jīng)驗弧蝇,我大概也就三個月碳褒。而Qt,最多也就一個月吧看疗。所以這篇文章并不是想說Qt的編程和PyQt的編程沙峻。而是想說說我這一個多禮拜的編譯經(jīng)驗和這兩者的關系而已。(只涉及技術思路两芳,不涉及具體技術摔寨。具體技術網(wǎng)上一大堆。)

Qt怖辆,最大的好處是可移植是复。Python,最大的好處是編程更加敏捷竖螃,且也是可移植的淑廊。那PyQt,其實就是Qt的一個Python wrapper√嘏兀現(xiàn)在好多C/C++的動態(tài)庫都有Python的wapper季惩。比如我常常使用的OpenCV啦,還有同事經(jīng)常使用的OpenGL啦腻格,OpenCL啦画拾。所以目前,用C++進行底層的實現(xiàn)菜职,而提供Python的接口青抛,是比較流行的做法。女兒前段時間很喜歡看《海底小縱隊》些楣,我也跟著看了幾集脂凶。里面有一個叫巴克的北極熊和一個叫呱唧的貓宪睹。他倆經(jīng)常一起出去執(zhí)行任務,因為組合了北極熊的力量和貓的敏捷蚕钦,他倆總是能出色地完成各種考驗⊥げ。現(xiàn)在想想,如果把C++比喻成北極熊嘶居,而把Python比喻成貓罪帖,也是十分合適的。

說回Qt/PyQt的編譯∮势ǎ現(xiàn)在常用的Qt版本有Qt4和Qt5兩種整袁。目前來說還是支持Qt4的開源庫多一些。而Qt4相較于Qt5佑吝,我暫時還沒有感受到明顯的弱項坐昙。所以我電腦上的環(huán)境目前是Qt4的最高版本-4.8.11。如果是安裝Qt芋忿,在Ubuntu上可以直接用sudo apt install來安裝Qt的開發(fā)庫炸客。在Windows上有相應的安裝程序來安裝。那PyQt呢戈钢,得看你用什么python版本痹仙。有的python版本,用pip就可以直接安裝殉了,而又的python版本开仰,就是無法直接安裝。而好死不死薪铜,由于某種原因众弓,我必須使用的python版本,用pip就是無法安裝PyQt4痕囱。這個時候就要通過源碼來編譯田轧。

riverbankcomputing的網(wǎng)站,上面有下PyQt4鞍恢,PyQt5以及SIP的源碼傻粘。SIP,是編譯PyQt所必須使用的編譯工具帮掉。所以編譯PyQt的順序是這樣:

  1. 安裝好Qt弦悉。
  2. 保證qmake在Windows的控制臺或Ubuntu的終端上是可用的。
  3. 下載SIP源碼包蟆炊,安裝SIP稽莉。
  4. 下載PyQt源碼包,安裝涩搓。

這里比較好玩的地方在于污秆,看看Qt到PyQt到底是怎么做的劈猪。PyQt的源碼包中沒有Qt的任何原文件,只有一些sip定義的文件良拼,還有其它的一些工具軟件战得。也就是說,PyQt的具體實現(xiàn)庸推,真的就是在Qt中常侦。另外,在整個編譯過程中贬媒,并不需要對Qt本身進行修改聋亡。那SIP的做法很好啊~后來,我看了一下SIP的文檔际乘。在Introduction中坡倔,是這么說的:

SIP是一個工具,能對C/C++庫自動生成Python-bindings脖含。SIP最初是在1998年被開發(fā)出來用于PyQt——the Python bindings for the Qt GUI toolkit致讥,但是它也同樣適用于C/C++庫。
本版SIP生成的綁定適用于Python2.3及以后版本器赞,包括Python3。
還有許多跟SIP功能類似的工具墓拜。其中一個就是SWIG港柜,事實上SIP之所以被叫做SIP是起初就是一個小的SWIG。與SWIG不同的是咳榜,SIP是專門設計用于將Python和C/C++集成在一起夏醉,并不遺余力地使集成更加緊密。

其特點如下(不全涌韩,摘錄):

  • 綁定能夠被快速加載畔柔,并且最大限度地減少了內存消耗,特別是在僅使用大型庫的小型子集時
  • 標準Python和C/C++數(shù)據(jù)類型之間的自動轉換
  • 用不同的參數(shù)簽名重載函數(shù)和方法
  • 支持Python的關鍵字參數(shù)語法
  • 支持明確指定的和自動生成的文檔注釋
  • 能夠訪問C++類的protected方法
  • 能夠定義一個Python類臣樱,它是C++類的一個子類靶擦,包括抽象的C++類
  • Python子類可以實現(xiàn)__dtor __()方法,該方法將從C++類的虛擬析構函數(shù)中調用
  • 支持普通的C++函數(shù)雇毫,類方法玄捕,靜態(tài)類方法,虛擬類方法和抽象類方法
  • 能夠在Python中重新實現(xiàn)C++的虛擬方法和抽象方法
  • 支持全局變量和類變量
  • 支持全局操作符和類操作符
  • 支持C++命名空間
  • 支持C++模版
  • 支持C++異常并以Python異常的方式捕獲它們
  • 支持棄用警告
  • 能夠定義C++類與相似的Python數(shù)據(jù)類型之間的映射棚放,并且是被自動調用的
  • 能夠自動利用任何可用的運行時類型信息來確保Python實例對象的類匹配相應C ++實例的類
  • 能夠改變Python對象的類型及元類型枚粘,用來包裝C/C++的數(shù)據(jù)類型
  • 全面支持Python全局解釋器鎖定,能夠讓指定的C++函數(shù)阻塞飘蚯,允許釋放鎖定從而運行其他Python線程
  • 支持C++實例所有權的概念(例如馍迄,代碼的哪一部分負責調用實例的析構函數(shù))以及在應用執(zhí)行期間所有權可能如何改變
  • 能夠生成一個C++類庫的綁定福也,這個C++類庫是在另外一個已經(jīng)生成了綁定的C++類庫的基礎上建立的,因此不同的綁定能夠集成和并正確地共享代碼
  • 有一個復雜的版本控制系統(tǒng)攀圈,從而允許在一組簡單的規(guī)范文件中描述C++類庫的完整生命周期暴凑,包括任何平臺特有的或者可選的特征。
  • SIP 可以在 UNIX, Linux, Windows, MacOS/X, Android and iOS下使用量承。

另外搬设,看了一下Using SIP的文檔。其中比較復雜的那個例子撕捍,說明了如何使用Qt來編寫一個控件拿穴,然后把它放到PyQt的工程中。這么做是非常有意義的忧风。因為:

  1. 如果控件本身的邏輯比較復雜默色,用Python實現(xiàn)比較慢,那就可以用C++來實現(xiàn)狮腿,只在PyQt中調用即可腿宰。
  2. 萬一看到別人用C++的Qt實現(xiàn)了一個自己想用的控件,可以在幾乎不改人家的源代碼的情況下缘厢,拿過來嵌入到自己的PyQt項目中吃度。(不過有一個前提,人家用Qt4贴硫,你就得用PyQt4椿每,人家用Qt5,你就得用PyQt5)

注:官網(wǎng)提供了Qt4到PyQt4的例程英遭,github上有一個Qt5到PyQt5的例程间护。在Google搜索Qt5ToPyQt5即可。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末挖诸,一起剝皮案震驚了整個濱河市汁尺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌多律,老刑警劉巖痴突,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異菱涤,居然都是意外死亡苞也,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門粘秆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來如迟,“玉大人,你說我怎么就攤上這事∫罂保” “怎么了此再?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵遮斥,是天一觀的道長示惊。 經(jīng)常有香客問我诈乒,道長蜘犁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任洁仗,我火速辦了婚禮竹习,結果婚禮上指孤,老公的妹妹穿的比我還像新娘瘩绒。我一直安慰自己猴抹,他們只是感情好,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布锁荔。 她就那樣靜靜地躺著蟀给,像睡著了一般。 火紅的嫁衣襯著肌膚如雪阳堕。 梳的紋絲不亂的頭發(fā)上跋理,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天,我揣著相機與錄音恬总,去河邊找鬼前普。 笑死,一個胖子當著我的面吹牛壹堰,可吹牛的內容都是我干的汁政。 我是一名探鬼主播,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼缀旁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了勺鸦?” 一聲冷哼從身側響起并巍,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎换途,沒想到半個月后懊渡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡军拟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年剃执,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片懈息。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肾档,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情怒见,我是刑警寧澤俗慈,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站遣耍,受9級特大地震影響闺阱,放射性物質發(fā)生泄漏。R本人自食惡果不足惜舵变,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一酣溃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧纪隙,春花似錦赊豌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至麸拄,卻和暖如春派昧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背拢切。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工蒂萎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淮椰。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓五慈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親主穗。 傳聞我的和親對象是個殘疾皇子泻拦,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容

  • Qt是屬于一個跨平臺的GUI開發(fā)軟件,支持的平臺有Unix忽媒、Linux争拐、Windows/WinCE、IOS等晦雨。 Q...
    一葉之界閱讀 8,162評論 0 17
  • # Python 資源大全中文版 我想很多程序員應該記得 GitHub 上有一個 Awesome - XXX 系列...
    小邁克閱讀 2,984評論 1 3
  • 英文原版:https://github.com/vinta/awesome-python中文版:https://g...
    會灰的大飛狼閱讀 3,605評論 1 56
  • 前言 關于Qt的學習道路需要不斷日積月累架曹,下面有一些學習資料提供給大家:Qt官網(wǎng)、編碼風格闹瞧、GitHub & Th...
    YBshone閱讀 5,723評論 3 95
  • “我喜歡你绑雄。”“……又和誰玩大冒險啦”“[圖片]怪我咯奥邮?[捂臉]”“不是說三聲的嘛……太沒有誠意了万牺!”“……你個…...
    姐夫點菜閱讀 243評論 1 3