- 來源 | 願碼(ChainDesk.CN)內容編輯
- 願碼Slogan | 鏈接每一個程序員的故事
- 網站 | http://chaindesk.cn
- 願碼願景 | 打造全學科IT系統免費課程,助力小白用戶、初級工程師0成本免費系統學習、低成本進階,幫助BAT一線資深工程師成長並利用自身優點創造睡後收入。
- 官方公衆號 | 願碼 | 願碼服務號 | 區塊鏈部落
- 免費加入願碼全思惟工程師社羣 | 任一公衆號回覆「願碼」兩個字獲取入羣二維碼
本文閱讀時長:9mingit
Qt爲移動和嵌入式設備提供了不一樣的外觀,用戶指望不一樣的演示風格。這是在框架內控制的,所以開發人員能夠專一於開發單個應用程序。程序員
Qt框架在兩個獨立的發行版中發佈,一個是商業版,一個是開源版(稱爲雙重許可版)。經過這種方式,他們能夠免費支持開源兼容的應用程序,同時爲封閉源商業項目提供不受限制的使用。在2000年以前(2.2版本發佈),免費分發的源代碼已經得到了各類許可證,一些團體認爲這些許可證與常見的開源計劃不兼容。對於2.2版本,它被改成GPL許可,這解決了對該集團對真正的開源自由的承諾的任何擔心。2007年,Qt 4.5發佈,他們將LGPL做爲選擇,爲喜歡更寬鬆許可的開發人員提供選擇。github
爲了開始咱們對Qt的探索和對Go的綁定,咱們將構建一個簡單的hello world 應用程序。爲了可以這樣作,咱們首先須要安裝therecipe / qt,這取決於咱們必須首先設置的各類先決條件。與Go-GTK同樣,咱們將依賴本機庫,這須要咱們設置CGo功能並安裝適合當前平臺的Qt庫。安全
Qt Go綁定須要CGo的存在才能使用本機庫。在完整的開發系統上,可能已經創建了這個系統。多線程
Qt網站提供各類安裝方法,包括任何擁有Qt賬戶(能夠免費註冊)的人均可以使用的定製在線安裝程序。一般,Qt安裝附帶Qt Creator(項目IDE),GUI設計器,其餘工具和示例。訪問上一個站點將自動檢測您的系統並建議最合適的下載(這一般是最佳選擇)。架構
請注意,Qt安裝可能很是大。若是硬盤驅動器上沒有至少40 GB的空間,則須要在安裝前留出一點空間。app
一些操做系統提供Qt庫和工具做爲其包管理器的一部分,它一般提供更輕量級的安裝,它將自動保持最新。框架
在Apple macOS上,安裝的最佳方法是使用Qt下載站點上提供的安裝程序。下載macOS安裝程序。下載後,打開包並在裏面運行程序; 這將安裝選定的編譯器,工具和支持應用程序。若是在安裝過程當中遇到任何錯誤,第一步是檢查Xcode安裝是否完整且是最新的。函數
在Windows上安裝比咱們看到的其餘一些工具包更簡單,由於Qt安裝程序有一個mingw捆綁包來設置大多數編譯要求(儘管仍然建議爲綁定階段設置本身的編譯器)下一個。要安裝它,請轉到前面列出的下載頁面並訪問Windows安裝程序。運行下載的可執行文件,而後按照屏幕上的說明進 建議安裝到默認位置。完成後,您就能夠設置綁定了。工具
使用Qt網站上的在線安裝程序是最簡單的方法,雖然能夠經過系統的包管理器進行安裝(若是你想嘗試包管理器方法,那麼首先閱讀Qt文檔)。在大多數平臺上,Qt下載網站將正確檢測平臺並提供簡單的運行安裝程序。下載文件後,您應該使其可執行,而後運行它:
這將像在macOS上同樣啓動安裝程序,從這裏,按照屏幕上的說明操做並完成安裝。
當涉及到登陸屏幕時,若是您有,請輸入您的Qt賬戶詳細信息。若是您有資格得到他們的開源許可證(GPL或LGPL),您能夠跳過此步驟,確保電子郵件和密碼字段爲空。
要使用qt(Go Qt綁定),咱們須要下載項目及其依賴項,而後運行安裝腳原本配置和編譯庫。若是使用Windows,建議使用MSYS2終端。
若是您將Qt下載安裝到默認位置之外的任何位置,請確保將QT_DIR環境變量設置爲您選擇的位置。
首先,應該使用go工具,運行go get和安裝庫及其依賴項go get。
下載完成後,咱們須要運行qtsetupqt項目中包含的工具; 因此,在cmd/qtsetup文件夾中,執行go run main.go。使用Linux終端:
此過程完成後,綁定應該可使用了。若是您遇到錯誤,那多是由於Qt工具未正確安裝或位置已自定義且您忘記設置QT_DIR環境變量。
要使用Go構建咱們的第一個qt應用程序,讓咱們建立另外一個Hello World 應用程序。與前面的示例同樣,咱們將在單個應用程序窗口中使用簡單的垂直框佈局。如下代碼應足以加載您的第一個應用程序:
package main import ( "os" "github.com/therecipe/qt/widgets" ) func main() { app := widgets.NewQApplication(len(os.Args), os.Args) window := widgets.NewQMainWindow(nil, 0) window.SetWindowTitle("Hello World") widget := widgets.NewQWidget(window, 0) widget.SetLayout(widgets.NewQVBoxLayout()) window.SetCentralWidget(widget) label := widgets.NewQLabel2("Hello World!", window, 0) widget.Layout().AddWidget(label) button := widgets.NewQPushButton2("Quit", window) button.ConnectClicked(func(bool) { app.QuitDefault() }) widget.Layout().AddWidget(button) window.Show() widgets.QApplication_Exec() }
讓咱們從這段代碼片斷中注意一些細節。每一個窗口小部件構造函數都採用(一般)兩個參數,每一個參數都是父窗口小部件和flags參數。傳入的其餘類型一般會在這些值以前添加,並在函數名稱中包含附加參數的註釋。例如, widgets.NewQLabel2(title, parent, flags)至關於widgets.NewQLabel(parent, flags).SetTitle(title)。此外,您將看到佈局應用於新的widgets.QWidget直通SetLayout(layout),並經過設置爲窗口內容window.SetCentralWidget(widget)。
要加載顯示並運行應用程序,咱們調用window.Show()而後widgets.QApplication_Exec()。此文件以一般的方式構建 go build hello.go:
因爲Qt框架的大小,構建的文件很是大。在針對特定分發進行包裝時,這將顯着下降。
構建階段的輸出是一個二進制文件,能夠在命令行上或經過雙擊文件管理器在當前計算機上執行。另外,您能夠直接執行它 - 不管go run hello.go哪一種方式,您應該看到一個簡單的窗口,以下所示:
在此階段,二進制文件能夠在具備安裝Qt的相同體系結構的計算機上執行。
Qt框架是使用C++語言編寫的 ,而且之前用C++編碼的人很熟悉它的大部分架構。值得注意的是,Go不是一種完整的面嚮對象語言,所以不能直接匹配這些功能。特別是,咱們應該看一下繼承,由於它對Qt對象模型很重要。
Qt API是一個徹底面向對象的模型,它大量使用了繼承模型。雖然Go並不真正支持傳統方式的面向對象繼承,但它的組合方法很是強大,而且在其位置上運行良好。結果意味着您可能不會注意到差別!
正如您在前面的示例中已經注意到的,每一個窗口小部件都但願將父窗口傳遞給構造函數。這使得Qt框架可以在移除窗口小部件樹時處理整理和釋放內存。QObject(這是全部Qt API的基礎對象)跟蹤其子對象,所以,在刪除時,也能夠刪除其子對象。這使得複雜窗口小部件層次結構的建立和刪除更容易正確處理。要使用此功能,您應該始終記住將父對象傳遞給窗口小部件的構造函數(以函數開頭的Go函數New...),儘管傳遞nil可能看起來像是在工做。
Qt相似於GTK +,這是一個事件驅動的框架,普遍使用信號來處理事件管理和數據通訊。在Qt中,這個概念分爲信號和插槽; 信號是事件發生時產生的信號,信號是接收信號的信號。設置插槽以接收信號的動做稱爲鏈接,這致使在調用其鏈接信號時調用插槽功能。在Qt中,這些是類型化事件,意味着每一個信號都有一個與之關聯的類型參數列表。定義信號時,此類型已設置,而且任何但願鏈接到信號的插槽都須要具備相同的類型。
s.ConnectMySignal( func(msg string) { log.Println("Signalled message", msg) } )
信號和插槽是Qt Designer生成的高級用戶界面,是處理多線程應用程序的推薦方法。信號能夠從後臺線程觸發,而且用戶接口代碼能夠將該信號鏈接到其本身的插槽,實質上是監聽信號。當信號觸發時,任何相關數據(信號參數)將從一個線程傳遞到另外一個線程,所以能夠在GUI更新中安全使用。
因爲Qt是對Qt API的輕量級綁定,所以特定於Go的文檔不多,但您能夠在Qt的博客文章中找到有關Qt設計和官方文檔中提供的全部類的更多信息。