效率 qt Qt開發之Go篇(三)

2021-10-14 19:56:38 字數 2161 閱讀 7438

上一節我們手擼了乙個hello world,然而對於稍微複雜一些的介面,手擼就實在太沒有效率了。designer才是gui設計的神器。therecipe/qt整合了uic工具,可以方便地將designer生成的ui檔案轉換成go檔案(其實有的地方也不很方便,之後會提到)。

開啟designer,新建乙個視窗,隨便拖幾個小部件上去,還是以hello world為例,如下圖:

為了簡單考慮,objectname就不改了,都按照預設的來,視窗是dialog,按鈕是pushbutton。在工程目錄下新建乙個ui資料夾,將視窗儲存為window.ui。

在ui資料夾下新建乙個window.go(叫什麼名無所謂),就一句話,package ui。修改hello_world.go,改為:

執行qtdeploy build desktop hello_world.go,編譯完成後,執行deploywindowshello_world.exe

我們已經完成了兩個demo了,可以注意到,由於go語言的特性,對於qt的介面存在一些改動。比如所有的介面函式的首字母都大寫了,這是因為在go語言中,只有首字母大寫的函式才會被外部訪問到。某些函式的後邊增加了數字,這是因為go語言沒有泛型,因此不同引數的函式必須通過函式名進行區分。這就體現出了vscode的重要性了,當你不清楚乙個函式後邊的尾綴時,可以按ctrl+空格進行**補全,此時可以檢視函式的名稱和引數型別。

言歸正傳,讓我們看看qtdeploy都做了什麼。當執行完qtdeploy之後,在ui目錄下會生成乙個uic_window.go的檔案,這個檔案就是根據ui檔案自動生成的go檔案。

通常來講,這個檔案不應該手動修改,因為每次執行qtdeploy之後檔案內容都會被還原。

可以看到,在這個檔案中定義了乙個名為newdialog的函式,它的作用就是創立乙個視窗,也就是對應hello_world.go的第12行。

我們在上一步的時候新建了window.go,其目的是定義了ui包,否則在hello_world.go裡邊找不到ui包,qtdeploy會直接報錯,跑不到uic的這一步。

qt是乙個事件驅動的gui庫,當使用者執行某些操作的時候會產生訊號(signal),如果將訊號和乙個槽(slot)連線起來,那麼當訊號觸發時,就會呼叫相應的槽函式。讓我們嘗試將按鈕的clicked訊號和視窗的close槽連線起來,實現按按鈕退出視窗的功能。

在therecipe/qt中,連線訊號和槽的方法與pyqt5有所不同(應該與c++的也不一樣,c++不熟,沒有考證),連線訊號的函式為connect+訊號名的格式。需要注意的是,待連線的槽的引數如果和訊號不一致是不能直接連線的。讓我們修改window.go:

package ui

func (c *dialog) init() )

}

再次執行qtdeploy,並執行生成的程式,可以發現,點按鈕之後視窗可以退出了。

其實還有另一種更方便的連線訊號的槽的方式,讓我們先將window.go還原,之後直接在designer裡邊進行連線,如圖:

儲存,並執行qtdeploy,生成的程式效果是一樣的。

Go開發之VScode安裝

1.找到官網 5.配置vscode支援中文 修改vscode顯示語言,通過shift command p調出搜尋框 選擇configure display language 開啟檔案locale.json 修改資料,zh cn是簡體中文 vs code附帶英語作為預設顯示語言,但其他語言可通過mar...

提公升開發效率之命名規範

對於變數命名,之前做開發的時候不太注意,覺得只是起個名字這麼簡單而已。但命名的時候也會糾結很多問題,不知道該用什麼單詞,往資料庫新增資料的時候用create還是add,對話方塊使用model還是用dialog,有時候甚至不知道怎麼起名字。首先列舉幾個不規範的命名 1.隨意使用簡寫 div class...

qt執行cmd命令列 Qt開發之Go篇(二)

官方安裝說明參見 本人使用windows,以下皆以windows為例。官方的wiki上有較詳細的安裝步驟,但是也有一些坑。因此,再將安裝過程複述一遍。安裝時選擇mingw編譯的qt版本,並且選中對應的編譯器,見下圖。安裝完成之後測試一下go是否在path中,cmd中執行go version進行測試,...