跳到主要內容

如何建立可攜帶的Qt開發環境


本文將會向您展示如何建立一個Windows平台上面的可攜式Qt開發環境。本文是建立在Qt 5.0.1及MinGW 4.7之上。
事前準備
  1. 準備一個用來安裝Qt及MinGW的Windows系統。
  2. 從Qt project的網站下載qt-windows-opensource-5.0.1-mingw47_32-x86-offline.exe。


製作步驟
  1. 使用qt-windows-opensource-5.0.1-mingw47_32-x86-offline.exe將Qt 5.0.1及MinGW 4.7安裝至電腦上。確定您在Select Components頁面上有選擇MinGW 4.7。本範例是將Qt安裝到C:\Qt的目錄裏。
  2. 將C:\Qt複製到您的USB碟上,我的USB碟是在E槽,所以就將c:\Qt複製到e:\Qt。
  3. 修改E:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin\qtenv2.bat以便移除系統相依性。修改後如下所示:就是把磁碟機代號移除。
    set PATH=\Qt\Qt5.0.1\5.0.1\mingw47_32\bin;\Qt\Qt5.0.1/Tools/MinGW\bin;%PATH%
    cd /D \Qt\Qt5.0.1\5.0.1\mingw47_32
  4. 將msvcp100.dll及msvcr100.dll複製到E:\Qt\Qt5.0.1\Tools\QtCreator\bin\(要確認他們都是32-bits的版本)
    NOTE: 若您的系統是32-bit的,可以在C:\Windows\system32找到他們。
    NOTE: 若您的系統是64-bit的,可以在C:\Windows\SysWOW64找到他們。(C:\Windows\system32也有,但是那是64-bit的版本)
  5. 在E:\Qt目錄下建立一個qtcreator.bat的批次檔,其內容如下:
    start \Qt\Qt5.0.0\Tools\QtCreator\bin\qtcreator.exe -settingspath \Qt\Qt5.0.0\Tools\QtCreator\settings
  6. 執行qtcreator.bat,並等待QtCreator出現。
  7. 新增compiler(Tools->Options->Build & Run->Compilers), 按下新增按鈕並選擇MinGW。輸入下面的內容:
    Name: MinGW 4.7
    Compiler path: \Qt\Qt5.0.1\Tools\MinGW\bin\gcc.exe

    NOTE: 您需要使用瀏覽按鈕選擇gcc.exe的位置,接著手動將磁碟機代號移除。否則ABI選項無法被正確的決定。
    NOTE: 您必須選擇x86-windows-msys-pe-32bit作為ABI的設定。
  8. 建立一個名為qt.conf的檔案並且放在qmake.exe所在的位置(E:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin\),其內容如下:
    [Paths]
    Prefix = /Qt/Qt5.0.1/5.0.1/mingw47_32

    NOTE: qt.conf內的目錄分隔字元必須是斜線,反斜線是不允許的。
  9. 新增Qt版本(Tools->Options->Qt Versions). 使用新增按鈕建立一個手動輸入的Qt版本手動選擇qmake.exe的位置,它應該位於E:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin\qmake.exe。
  10. 新增Kit(Tools->Options->Kits). 使用新增按鈕建立新的kit. 您需要選擇前面步驟7及9所建立的Compiler及Qt version。同時,選擇E:\Qt\Qt5.0.1\Tools\MinGW\bin\gdb.exe為Debugger。
  11. 前面步驟完成後,關閉QtCreator。
  12. 進入E:\Qt\Qt5.0.0\Tools\QtCreator\settings\QtProject\qtcreator
  13. 修改qtversion.xml
    1. 在qtversion.xml中,找到下面設定:
      E:/Qt/Qt5.0.1/5.0.1/mingw47_32/bin/qmake.exe
    2. 將QMakePath設定中的磁碟機字元移除:
      /Qt/Qt5.0.1/5.0.1/mingw47_32/bin/qmake.exe
  14. 修改profiles.xml
    1. 在profiles.xml中找到下面的設定
      E:\Qt\Qt5.0.1\Tools\MinGW\bin\gdb.exe
    2. 將Binary設定中的磁碟機字元移除
      \Qt\Qt5.0.1\Tools\MinGW\bin\gdb.exe
  15. 現在將你的USB碟移到其他沒有安裝過Qt的電腦上面,執行qtcreator.bat來啟動QtCreator。
  16. 試著建立一個簡單的專案來看看你的環境是否OK。

NOTE: 如果你看到`Failed to load platform plugin “windows”`這樣的錯誤。將步驟8所建立的qt.conf放到你的程式目錄下,就可解決此問題。舉例來說,若您的程式輸出是在d:\src\myapp\release,就將qt.conf複製到此目錄下。

留言

這個網誌中的熱門文章

Windows Installer死掉了嗎?

最近我的電腦發生了奇怪的事情。只要是與Windows Installer有關的東西,都無法動作了。也就是說,我無法安裝包裝成msi的軟體。也無法加以移除。搞了半天,始終沒有頭緒。一度動念頭想要將整台電腦重灌。 不過,經過一路追蹤問題,我發現是Windows Installer的服務無法啟動,而造成整個問題。透過系統管理工具中的『服務』,去啟動Windows Installer服務時,每次都看到代碼1067的錯誤訊息。無論怎麼重灌Windows Installer也無法解決。 今天突然靈光一閃,我開始把正在執行的程式一個接著一個砍掉,一邊砍一邊去啟動Windows Installer服務。試了好久,都快要放棄的時候。忽然我的Windows Installer就run起來了。趕快看一下是砍了哪個程式變成這樣的。終於被我找到罪魁禍首了!!就是下面這個程式造成的。只要把這個服務停掉,我的Windows Installer就復活了!!! 感謝匿名網友提供另外一個小技巧: 『只要在windows installer服務的內容裡,在登入那頁勾" 允許服務與桌面互動 " 就輕鬆解決囉!』 BTW, 我沒實際試過,有遇到這個問題的人,請試試看!然後好心的跟我回報一下! 有些網友找不到service的控制畫面。下面簡單說明一下: service的控制是在 『控制台->系統管理工具->服務』 英文的話是 『Control Panel->Administrative Tools->Services』 再不然,用command line下services.msc /s也可以叫出來。 再不行...就試試吧 > net stop LVPrcSrv > %WINDIR%\system32\sc.exe config LVPrcSrv start= disabled PS: 如果需要重新安裝MSI installer,可以到Microsoft的 下載中心 。

Portable Python

我常常需要把Python寫的script帶到其他電腦使用,因此,一個免安裝,可攜帶的Python就顯得十分重要。最近看過了幾個可攜式Python的方案,下面這個PortablePython是我覺得最合我意的方案。因為它提供了大部分會用到的Python module及工具,甚至連wxPython及PyGame也有。同時也有好用的Python編輯器PyScripter。所有開發Python所需的開發工具都一應俱全了!把它放到隨身碟中,就不用到處幫人安裝Python了。 PortablePython : http://www.portablepython.com/

一個Python程式可幫檔名加上日期與時間

很多時候,我們希望能夠將檔案或是目錄名稱加上一個時間及日期,以便release。所以,我就寫了一個小小的程式來達到這個目的。我把這個程式貼上來,讓有興趣的人可以拿去使用。 -- #!/usr/bin/env python # -*- coding: ascii -*- """ Usage: cfgfn.py [filename or directory list] """ import sys import os import time import re import glob ro = re.compile(r'(?P<FN> .*)-[0-9]{8}-[0-9]{4}(?P<EXT> .*)') for fnl in sys.argv[1:]: for fn in glob.glob(fnl): mo = ro.match(fn) if mo: pre = mo.group('FN') ext = mo.group('EXT') else: pre, ext = os.path.splitext(fn) newFn = pre + time.strftime('-%Y%m%d-%H%M') + ext os.rename(fn, newFn) print 'Rename %s -> %s' % (fn, newFn)