[Qt GUI] QtQuick/QML 與 QtWidgets 的選擇

上一篇文章([Qt for Python] PySide 與 PyQt 的選擇)我簡單敘述了PySide跟PyQt的比較,不論你的最終選擇為何,對於初次選擇Qt作為GUI開發框架的學習者來說,一開始可能又會面臨到另一個困擾,就是QtQuick/QML跟QtWidgets的差異與選擇,所以在進入正式的系列文章之前,先來談談這個問題。

跟上一篇相同,先講結論,我認為選QtQuick/QML就對了。原因很多,不過我一樣列了三個最主要的理由,如下。


第一、完美切割 UI 跟 bussiness logic

對網頁程式開發有一定了解的開發者來說,對於 MVC 這個設計概念應該都不陌生。採用QtQuick/QML開發UI的話,等於是天然的MVC架構,完全把UI的邏輯跟商業邏輯切割清楚,不論你在商業邏輯的實作部份,是用C++或Python,都可以容易地在設計上符合MVC的設計理念。

雖然說,QtWidgets也是有獨立的UI檔案,是基於XML的文件。但在UI的操作邏輯,還是得透過C++或Python的實作來達成。光這一點優勢,就有足夠的理由選擇QtQuick/QML來實作UI。怎麼說呢?想想看,如果UI要改版的情況,商業邏輯沒有太大改變,那需要修改的程式碼,等於只有QtQuick/QML的部分。反之,在這樣的前提下,採用QtWidgets開法的UI,為了UI設計改版,有很大的可能性是整套程式碼都要修改。

第二、語法簡單直覺且開發快速

不論QtWidgets或QtQuick/QML,都可以透過官方IDE的UI設計工具,用拖曳的方式組成符合設計的UI,且自動產生對應的UI檔案。QtWidgets的UI文件是類似於Android UI的XML格式檔案,雖然有所謂的結構性,但閱讀起來不是太容易,且維護上也比較花時間。

相對來說,QtQuick/QML就是一個非常直接的描述式語言,透過描述UI元件的屬性,再搭配JavaScript語言,實現UI邏輯。程式的易讀性跟維護,都比QtWidgets好太多。另外,在UI動畫的開發上,也比QtWidgets容易,而且有比較佳的效能。

第三、渲染效能搭配硬體優化

自從Qt 4.7開始,官方發佈了QtQuick/QML這個新的GUI框架與程式語言,Qt公司就致力於其效能的優化,尤其在每一次大版本發佈(Qt5與Qt6),都有很大程度的技術改進。包括底層渲染引擎的效能,還有與硬體(GPU)的整合。

因為QtQuick/QML也是用C++實作的,且設計上本來就跟OpenGL有高度的整合,所以在繪製的效能上是非常不錯的。尤其是在嵌入式系統中,其特性就能發揮相對的優勢。這也是為什麼,有越來越多的嵌入式平台,採用Qt作為其應用程式的開發框架。像是近幾年來車用的儀表板,漸漸以數位式為主流,而有部分車商的數位儀表板,就是採用QtQuick/QML實作的。


接下來的文章預告

如果你是剛開始接觸Qt GUI框架,搭配Python開發,勢必會遇到UI與Python的互相溝通問題,網路上可以搜尋到的文章或影片教學,大多是以QtWidgets為主的,所以我接下來會針對QtQuick/QML如何與Python的溝通,做一系列的文章。

特別的是,我在之前寫了幾篇關於QtQuick/QML與C++的文章,所以接下來幾篇,也會參考之前的文章,介紹一下改成用Python是如何實作。換句話說,在不修改之前QML範例程式的情況下,改成用Python實作對應的功能,達到同樣的運行結果。

如果你對接下來的文章有興趣,歡迎填寫頁面最下方的表單,訂閱電子報,屆時會發送文章通知給訂閱者。

Read more

聽說 AI 都能寫程式了,那我還需要學程式語言嗎?

自從ChatGPT橫空問世,人們在獲取知識的方式,發生很大的改變。很多既有的知識或疑問,可以不用在透過Google等搜尋引擎,搭配正確的關鍵字,從中找到相符的結果。 有了ChatGPT,只要用聊天的方式,用人類自然語言詢問,就能在短時間統整出邏輯清晰且條理分明的結果。不論是知識的學習、文章的統整、甚至程式的撰寫,都能透過AI工具快速產生具有一定水準的成品。 那,既然AI都能幫忙寫程式,而且也寫得不錯,我還需要學習程式語言嗎?答案是「肯定」的。 AI是輔助工具,不是程式設計師 沒錯!AI能寫出不錯的程式碼,但如果你本身不懂程式設計,你如何判斷它寫出的結果,是否符合你所想要的?對懂程式的人來說,他會比較清楚該如何對AI工具「下指令」,程式設計師可以利用AI工具的輔助,節省掉實際開發與除錯的時間。 再者,要寫出一個可以應用的程式,並非如此簡單。從一開始的需求分析,到架構設計、模組化元件、單元測試等等,絕對不是透過跟AI工具講三兩句話就能產出的。 AI是透過背後龐大資料與分析模型取產生我們想要的結果,意即,它做不到「無中生有」。相較於AI,人類的優勢在於「創造」。AI工具的出現與

By 三寶爸工程師

[程式教育] 該學哪一種程式語言才好?你必須先了解程式語言的7個應用領域

之前一再強調,學習程式語言不完全是為了將來當工程師而學的。但對初學者來說,在這麼多種程式語言中,究竟要選哪一種程式語言做學習呢? 在這之前,我們要先了解,程式語言的應用,大概有哪些領域。先看看自己對哪一個領域有興趣,不妨從該領域下手,學習一種該領域會用到的程式語言,並透過學習去完成一個小作品。 以下是依照應用領域的分類,列出該領域的幾個主要採用的程式語言。 一、網頁開發 (Web Development) 網頁(網站)開發是最普遍的一種應用,幾乎每個人每天會接觸到的,都脫離不了網頁開發的相關產品。在這裡我要特別說明,「開發」網站跟「架設」網站是兩回事,如果只是要「架設」網站,那是可以不需要學會寫程式就能做到的,因為有太多現成工具就可以達到「架設」網站這件事。關於「架設」網站的工具,我們有機會再另外寫一篇文章說明。但不論如何,網頁(網站)的基本運作原理還是要懂的。 網頁開發的部分,一般來說還區分「前端」和「後端」的開發與維護。

By 三寶爸工程師

[程式教育] 我未來不想當程式設計師,那還需要學程式語言嗎?

這個問題,最中肯又八股的答案當然是「不一定,但有學比較好」。如果問我,我肯定是建議你「最好要學」。 我換個問題,我未來不想當英文老師,那我需要學英文嗎?答案應該很清楚了! 你可能會說「不一樣啊!」請你仔細想想,學習「語言」跟「程式語言」的目的,我在 [程式教育] 學習程式語言的Why and How 這篇文章內有提到,兩者的目的一樣都在「溝通」,只是對象不同。 以目前AI發展的速度,也許不久的將來,「語言」也不需要學習了也說不定。屆時,「程式語言」的角色可能反而更吃重。並不是說你要學會用程式語言來開發軟體,而是透過學習程式語言吸取基本知識和延伸的能力。以下我列出五點,學習程式語言所能帶來的價值。 一、提升問題解決能力與創造力 學習程式設計可以培養邏輯思維和系統化解決問題的能力。這些技能在各種職業中都是非常寶貴的,無論是管理、行銷、工程還是醫療領域,遇到複雜問題時,能夠分解問題並系統地找到解決方案是非常重要的。 程式設計是一種創造性的活動,讓你能夠實現自己的想法和項目。

By 三寶爸工程師