qt5編譯svglength
A. qtsvgitem設置大小
給界面或者按鈕上顯示一個圖標或背景圖片,日常使用.png格式的文件完全夠用,但是有些使用場景需要把圖片放大顯示時,使用.png文件就會開始模糊,這時需要載入.SVG文件,即使放大也很清晰。在界面添加一個QLabel控制項,最終是要把.Svg圖片顯示到QLabel中的。
(1)使用QSvgRenderer載入矢量圖片.
(2)提供繪制設備,QPixmap對象;
(3)提供畫家,QPainter對象;並與繪制設備建立聯系;
(4)調用QSvgRenderer的render(painter)函數,讓畫家執行渲染操作!
(5)最後將繪制設備放到QLabel中。在界面添加一個QLabel控制項,最終是要把.Svg圖片顯示到QLabel中的。
(1)使用QSvgRenderer載入矢量圖片.
(2)提供繪制設備,QPixmap對象;
(3)提供畫家,QPainter對象;並與繪制設備建立聯系;
(4)調用QSvgRenderer的render(painter)函數,讓畫家執行渲染操作!
(5)最後將繪制設備放到QLabel中。
B. 「干貨」python-qt5在centos7下編譯方法
本指南提供了在CentOS 7 for Python 2.7上編譯PyQt5的基本說明
1、安裝Qt
2、安裝依賴項
3、編譯SIP
4、編譯PyQt
現在可以從首次運行的Python版本訪問PyQt configure.py。
如果這樣會產生一個帶有單個按鈕的新窗口,那麼恭喜成功了!
C. 討論上Windows平台怎麼編譯Qt5
Qt5的編譯官方有一篇wiki:http://developer.qt.nokia.com/wiki/Building_Qt_5_from_Git
簡要的總結下我的體會,歡迎補充完善、批評指正。
1.First clone the top-level qt5 git repository:
git clone git://gitorious.org/qt/qt5.git qt5
這一行不用說了,自然是將Qt5的代碼克隆。不過,如果你只是初次克隆Qt5的代碼,會很驚訝:為何克隆後的代碼只有十幾MB?
原來,Qt5已經實現了Qt的模塊化,詳見:http://labs.qt.nokia.com/2011/05/12/qt-moles-maturity-level-the-list/
所以可以在克隆得到的Qt5源碼根目錄下看到:.gitmoles 文件,其內容部分摘錄如下:
[submole "qtbase"]
path = qtbase
url = git://gitorious.org/qt/qtbase.git
[submole "qtsvg"]
path = qtsvg
url = git://gitorious.org/qt/qtsvg.git
[submole "qtdeclarative"]
path = qtdeclarative
url = git://gitorious.org/qt/qtdeclarative.git
...
這時,有Git基礎的朋友一定會想到:
git submole init
git submole update
不過,請不要這樣做!
2. Following the README file we initialize the repository. This clones the various sub-moles of Qt5:
./init-repository
這是一個perl腳本。如果是在msys-git下,會發現Perl的版本不夠。
我們需要安裝一個Windows版本的Perl:http://www.activestate.com/activeperl/downloads
安裝好以後,Perl就添加到PATH環境變數中去了。
在MSVC的控制台下執行:
perl init-repository --help
注意,不是直接執行init-repository,要用perl來執行它。看看幫助:大致了解下有哪些功能。
3. 注意它的三個小提示:
Hint1: If you』re going to contribute to Qt 5, you』ll need to pass the —codereview-username <Jira/Gerrit username> option to set up a 「gerrit」 remote for all the sub-moles.
Hint2: If you』re having problems downloading the webkit repository (which is quite big), you can pass —no-webkit.
Hint3: If you』re behind a firewall, pass —http
4. 我的方法:
perl init-repository -f --codereview-username loaden
這樣就可以實現子模塊的批處理了。特別要注意的是:在處理這些子模塊時,其實是git clone了這些子模塊,以致於他們可以獨立使用。在qt5\qtbase目錄下可以找到.git目錄。
這與git submole update的結果是不一樣的!!
同時我使用了codereview的用戶名,是為了可以創建一個名為gerrit的遠程倉庫,可以將貢獻的代碼推送進去,類似:
git push gerrit HEAD:refs/for/master
5. 源碼下載是非常慢的,因為QtWebkit達到了1.7GB。源碼下載完成後,進入Qt5源碼目錄,配置環境變數:
set PATH=%CD%\qtbase\bin;%PATH%
之後echo看一下結果是否正確:
echo %PATH%
6. 建議直接在Qt5的源碼目錄下執行配置!
configure -confirm-license -opensource -release -shared -platform win32-msvc2010 -fast -no-stl -no-qt3support -nomake examples -nomake demos -nomake tests
7. 編譯全部模塊,直接執行nmake就可以了。如果只編譯一個模塊,可以這樣:
nmake mole-qtbase
雙擊打開Qt5目錄下的Makefile文件,可以看到有這些模塊:
SUBTARGETS = \
mole-qtbase \
mole-qtsvg \
mole-qtphonon \
mole-qtxmlpatterns \
mole-qtdeclarative \
mole-qttools \
mole-qttranslations \
mole-qtdoc \
mole-qlalr \
mole-qtqa \
mole-qtlocation \
mole-qtactiveqt \
mole-qtsensors \
mole-qtsystems \
mole-qtmultimedia \
mole-qtfeedback \
mole-qtquick3d \
mole-qtdocgallery \
mole-qtpim \
mole-qtconnectivity \
mole-qtwayland \
mole-qtjsondb \
sub-qtwebkit-pri \
mole-qtwebkit-examples-and-demos
D. Qt5.12.5 靜態編譯以及裁剪大小對比
最近在研究用靜態編譯的 Qt 做個 Qt 的安裝包程序,因為 nsis 在界面自定義還有多語言適配等問題上不太理想。做安裝包程序基本上只需要有最基礎的 Qt 界面模塊即可,不過把除了 UI 的模塊全部去掉又比較難用...這里記錄下兩種極端編譯配置下生成的程序大小作為參考。
編譯需要的環境可以看官方文檔, windows-requirements 中的 Building from Source 有說明需要安裝的工具,所有工具都記得要添加到環境變數。
最後的-mp 是多核編譯的參數,多核編譯用 jom 快得一匹,全模塊也只要 20 分鍾編譯完成。
這個配置把能刪的模塊都刪了,編譯出來後基本也就基礎UI相關類能用...所以編譯起來超快的。
比全模塊配置生成的exe減少了 30%的大小,不過 30%也就 3M,在 windows 平台的話倒是沒必要追求這種極致了=-=
此時如果是移動了編譯後的路徑,可能報錯 Qt version is not properly installed,please run make install 。在 qmake.exe 所在目錄新建一個 qt.conf 文件,並添加下面的內容即可:
E. 為什麼qt 5 編譯構建 configure 作用意義原因
你這個程序會調用某些其他系統裡面的功能庫,這個東西就是定義使用什麼地方的庫。因為有些時候某個庫不會裝到標准通用的 /usr 裡面,而是裝到了某些莫名其妙的地方。但這個時候系統提供的查詢方式就會找不到。只能進行手工指定,這個時候這個參數的作用就體現出來了。
有的程序這種設置也可以不要參數,默認就回去系統默認位置找。一般這種情況下,configure 可能會:1、不加這個參數就不打開對應的功能;2、不加參數系統會默認自己檢測相應的環境決定是否啟用對應的功能,設置這個參數後系統會強制啟用這個參數對應的功能。
具體要看當前的程序是怎麼設計的了。
F. Qt5 在linux 下的編譯,該怎麼處理
[wanglj@localhost testQT]$ make
g++ -o testQT main.o -L/opt/Qt5.1.1/5.1.1/gcc_64/lib -lqt-mt -lXext -lX11 -lm
main.o: In function `main':
/home/wanglj/testQT/main.cpp:6: undefined reference to `QApplication::QApplication(int&, char**, int)'
main.o: In function `QString':
/usr/include/QtCore/qstring.h:413: undefined reference to `QString::fromAscii_helper(char const*, int)'
main.o: In function `main':
/home/wanglj/testQT/main.cpp:7: undefined reference to `QLabel::QLabel(QString const&, QWidget*, QFlags<Qt::WindowType>)'
main.o: In function `~QString':
/usr/include/QtCore/qstring.h:869: undefined reference to `QString::free(QString::Data*)'
/usr/include/QtCore/qstring.h:869: undefined reference to `QString::free(QString::Data*)'
collect2: ld 返回 1
make: *** [testQT] 錯誤 1
但若直接用 qtcreator 打開編譯,則無錯誤
並且find -name libqt-mt* 也找不到其他版本的該文件
用qtcreator編譯好的可執行文件,也找不到連接該lib文件
[wanglj@localhost build-testQT-桌面-Debug]$ ldd testQT
linux-vdso.so.1 => (0x00007fff4ddff000)
libQtGui.so.4 => /usr/lib64/libQtGui.so.4 (0x000000397f000000)
libQtCore.so.4 => /usr/lib64/libQtCore.so.4 (0x000000397ea00000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003978600000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007fda6a081000)
libm.so.6 => /lib64/libm.so.6 (0x0000003977a00000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x0000003983a00000)
libc.so.6 => /lib64/libc.so.6 (0x0000003977e00000)
libgthread-2.0.so.0 => /lib64/libgthread-2.0.so.0 (0x000000397a600000)
librt.so.1 => /lib64/librt.so.1 (0x0000003978e00000)
libglib-2.0.so.0 => /lib64/libglib-2.0.so.0 (0x0000003979200000)
libpng12.so.0 => /usr/lib64/libpng12.so.0 (0x000000397be00000)
libz.so.1 => /lib64/libz.so.1 (0x0000003978a00000)
libfreetype.so.6 => /usr/lib64/libfreetype.so.6 (0x000000397ba00000)
libgobject-2.0.so.0 => /lib64/libgobject-2.0.so.0 (0x0000003979e00000)
libSM.so.6 => /usr/lib64/libSM.so.6 (0x0000003985a00000)
libICE.so.6 => /usr/lib64/libICE.so.6 (0x0000003984e00000)
libXi.so.6 => /usr/lib64/libXi.so.6 (0x000000397ce00000)
libXrender.so.1 => /usr/lib64/libXrender.so.1 (0x000000397d600000)
libXrandr.so.2 => /usr/lib64/libXrandr.so.2 (0x000000397de00000)
libXfixes.so.3 => /usr/lib64/libXfixes.so.3 (0x000000397da00000)
libXcursor.so.1 => /usr/lib64/libXcursor.so.1 (0x000000397e200000)
libXinerama.so.1 => /usr/lib64/libXinerama.so.1 (0x000000397e600000)
libfontconfig.so.1 => /usr/lib64/libfontconfig.so.1 (0x000000397d200000)
libXext.so.6 => /usr/lib64/libXext.so.6 (0x000000397c600000)
libX11.so.6 => /usr/lib64/libX11.so.6 (0x000000397b600000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003978200000)
/lib64/ld-linux-x86-64.so.2 (0x0000003977600000)
libuuid.so.1 => /lib64/libuuid.so.1 (0x0000003983600000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x000000397c200000)
libxcb.so.1 => /usr/lib64/libxcb.so.1 (0x000000397ae00000)
libXau.so.6 => /usr/lib64/libXau.so.6 (0x000000397aa00000)
------解決方案--------------------
INCPATH = -I/usr/lib64/qt-3.3/mkspecs/default -I. -I. -I$(QTDIR)/include
這一行看上去你調用的qmake不是5.1.1的。試試指定完整路徑運行qmake
/opt/Qt5.1.1/5.1.1/gcc_64/bin/qmake testQT.pro
G. QtCreator配置交叉編譯工具鏈
環境:ubuntu16.04桌面環境。
說明:使用ubuntu16.04桌面環境,安裝QtCreator之後,再利用QtCreator開發QT5 GUI程序,如果編譯的程序要運行在arm linux嵌入式系統中,則必須配置交叉編譯工具鏈。
主要配置內容:調試器、編譯器、QT版本。
1、打開工具,點擊選項。
2、選擇選項中的構建與運行,概要界面。
3、構建套件(kit)界面。
4、Qt Versions界面。
5、編譯器界面。
6、Debuggers界面。
7、Qbs界面。
8、交叉編譯例子: