『壹』 qrc_images.cpp是什麼是qt庫自帶的文件嗎
圖片是一種資源,而在Qt中,對於資源的使用是有其獨特的方式的!
①:一般來說:資源在內存中是用資源對象樹來表示的,該樹在程序啟動時創建。
②:而對於資源而言:我們都是需要先將其加入到這棵樹中才能載入到內存中並被程序使用!!
③:而將一個圖片資源放到程序的資源對象樹中是用函數QResource::registerResource()來實現的。亦即:要將資源向這顆資源對象樹進行注冊,這樣才對在系統中new創建這個資「葉子」。
Qt中經常會使用一些圖片作為程序的界面,經常用的有三種方法,這里借鑒了小竇朋友的方法總結
1、在程序運行時候載入圖片,
也是最簡單的方法
image=new QImage("1.png");
這種方法在程序運行時候再去載入圖片,需要在程序的運行目錄下添加事先放置好圖片,這樣做的優點是程序運行時候不需要的圖片不載入,節省了內存,但是讀取速度慢。
2、將圖片編譯進工程中,
這樣在程序發布時候不需要在目錄下放置圖片,主要通過的是.qrc文件,例如添加image.qrc文件,這個文件會在編譯時候生成qrc_image.cpp文件,,我們可以自己看下這個生成的cpp文件,發現其中就是主要有三個static const數組。
qt_resource_data[]
qt_resource_name[]
qt_resource_struct[]
這其中qt_resource_data[]中存放的就是圖片的二進制數據。而後邊的兩個數組我們猜測是做了一個圖片名字到上邊數據的映射,方便系統找到data中的二進制數據。
至於內部作用機制,有的資料上說是:當使用qrc資源文件時:系統會自動將所有的圖片資源都向程序的資源對象樹進行注冊,並且當程序結束運行時再進行反注冊。這也正好解釋了為什麼此種方法下圖片資源會一直佔用內存的原因。
使用這種方法時:由於圖片資源一直在內存中,避免了I/O操作,從而加快了讀取速度。但是卻是以消耗內存為代價的
方法如下:
在qrc文件中加上下面的代碼。
<!DOCTYPE RCC><RCC version="1.0">
<qresource>
<file>1.png</file>
<file>2.ico</file>
</qresource>
</RCC>
然後再.pro文件中添加下面的代碼
RESOURCES = res.qrc
在程序中使用圖片文件時候,通過
:1.png的方法來使用
例如
image=new QImage(":1.png");
3、手動進行注冊
第二種方法相當於靜態載入,但很多情況下我們更希望是動態載入,亦即:用到哪個資源才將該資源載入進來,而不用的則不載入。
上邊第二種方法之所以顯示出靜態載入的特性,這是由於系統一次性自動把所有圖片資源都進行了注冊,並且在程序運行過程中一直沒有進行反注冊才導致的。 如果我們可以自行決定:什麼時候對那一部分圖片資源進行注冊?什麼時候對哪一部分圖片資源進行反注冊。則顯然我們可以手動控制整個資源在內存中的生存周期!!
這種方法的主要步驟為:
①:生成外部二進制資源文件。
②:在需要時將該資源向程序的資源對象樹進行注冊並使用。
③:在不需要時進行反注冊。
步驟①主要是用了Qt自帶的一個工具:rcc.exe (處於bin文件夾中)。這是Qt的一個資源編譯器,其編譯對象是qrc文件,而生成rcc二進制資源文件。
那我們可以用它來執行命令 rcc -binary name.qrc -o name.rcc 來把qrc資源文件轉成rcc二進制資源文件。
而後在程序內部:當需要使用某一圖片資源時:則直接調用
QResource::registerResource(「name.rcc」)進行注冊創建分配內存即可! 而不使用時候則調用反注冊函數!!
這種方式算是動態載入,會少佔用內存。但是如果圖片過多的話,什麼時候需要載入,什麼時候需要去掉,這些邏輯就需要十分注意了。
『貳』 python怎麼使用qtdesigner設計的ui
軟硬體環境
OS X EI Capitan
Python 3.5.1
PyQt 5.5.1
PyCharm 5.0.1
前言
在PyQt5系列教程的第一篇h50218157,我們已經搭建好了開發環境,今天,我們就用Python開發第一個Qt GUI程序,讓大家感受下Qt開發的魅力,熟悉下Qt開發GUI程序的一般流程。
製作程序UI界面,一般會有2種方法,利用UI製作工具和純代碼編寫,像移動開發中的Android和iOS都是這樣,在PyQt5中,我們也有這么2種方式。
QtDesigner工具簡介
QtDesigner是專門用來製作Qt程序UI界面的工具,它使用起來非常簡單,只要通過拖拽和點擊就可以完成復雜的界面設計,而且還可以隨時預覽查看效果圖。
其中,區域1是UI界面製作導向,QtDesigner為我們提供了一些常用模塊,非常方便;區域2是UI控制項列表;區域3是控制項屬性列表;區域4是Action Editor編輯列表;區域5信號和槽的編輯列列表;區域6是資源處理窗口。
第一個PyQt5程序
說了這么多,還不如來動手實踐一下。
這個是我們第一個PyQt5項目的界面效果圖,需要實現的是當點擊界面上的按鈕時,彈出一個提示框,提示框內顯示一串文字。
好了,目標定好了,馬上開始去實現它。
QtDesigner設計UI
創建一個基於Main Window模塊的UI文件,取名叫firstPyQt5.ui。從Widget Box中找到(也可以)Push Button,將它拖拽到工作空間里,調整位置,在Button上輸入文字,調整字體及大小,這些都可以在Property Editor里操作。按鈕點擊彈框的操作會牽出Qt里非常重要的一對概念,即信號和槽(signal and slot),關於這個我打算再開一篇博文細講。現在你只需要知道slot就是一個函數,如果一個signal和一個slot綁定以後,那麼signal被觸發,slot就會被執行。
那麼問題來了,怎麼在QtDesigner里綁定signal和slot呢?打開菜單欄里的Edit—>Edit Signals/Slots,然後游標移到按鈕上點擊拖拽,這時會彈出一個編輯框
因為是點擊,所以signal選擇clicked(),slot函數現在還沒有,我們就點擊Edit新建一個,叫firstPyQt5_button_click()
為了演示一下資源文件的使用,這里導入兩張圖片,一張給主窗口,另一張給幫助菜單項里的Action。
在QtDesigner引用資源文件之前,需要先准備一個qrc文件,它跟xml文件比較類似,用來制定資源文件的路徑
接下來就可以在QtDesigner的Resource Browser里倒入qrc文件,這樣qrc文件中描述的資源就可以使用了
將firstPyQt5.ui轉換成python代碼
非常簡單,通過Qt提供的命令行工具pyuic5就可以輕松實現
創建PyCharm工程
新建一個新的python文件main.py,代碼如下
接下修改下firstPyQt5.py文件,主要是去實現slot函數,因為之前在QtDesigner里沒有實現,讓它彈出一個消息框
最後運行下工程
這里一般將ui文件單獨存成一個文件,便於更新。
『叄』 python怎麼輸入圖片
python導入圖片的方法:
一、直接從源圖片中導入(圖片位於images文件夾內)self.label1=QLabel(self)
self.label1.setPixmap(QPixmap(r"images/head.jpg"))
layout.addWidget(self.label1)
#或者 layout.addWidget(QLabel(self, pixmap=QPixmap("images/head.jpg")))
二、利用qrc資源導入
1、先寫qrc文件
images/head.jpg
images/body.jpg
2、將qrc文件轉化成py文件
轉化命令為:pyrcc5 res.qrc -o res_rc.py
3、導入res_rc.py:import res_rc
4、layout.addWidget(QLabel(self,pixmap=QPixmap(":/images/head.jpg")))
注意需要添加:/符號作為前綴。