2017-10-04 106 views
2

我正在開發一個使用Qt的C++應用程序。該應用程序顯示一些使用QML製作的各種定製小部件。這些小部件使用信號/插槽系統呈現值。在q ++中使用qml管理圖形用戶界面

我想這可能是管理最好的辦法:

  • 管理在QML文件,包括渲染和業務規則的一切。
  • 嵌入QML文件到了QWidget類(QQuickWidget),並在C管理渲染和業務規則++
+1

從未使用qml,我會虛心地建議C++ :) – jwilson

回答

2

取決於您的核心邏輯有多複雜。如果它小而簡單,那麼在QML中做。即使它不那麼簡單,使用QML也會帶來很多好處,因爲與C++相比,原型設計有很多,更快,更容易。你不必重新編譯,你不會崩潰,但相當有用的錯誤信息。我發現QML的原型比C++快5到10倍。

如果您希望獲得更好的性能或內存效率,並且它是無縫的即插即用轉換,您可以隨時將事物移至C++,因爲您可以在兩個世界中使用信號和插槽。在QML和C++端口中開發算法通常比從頭開始的C++算法更快。缺點是你在低級別上有不同的工具集,在C++中你可以使用Qt的核心類,而在QML中,你將不得不使用JavaScript及其編程習慣用法。這實際上取決於你有多少經驗,但通過一些練習,將QML翻譯成C++是相當容易的。這就是說,即使你選擇QML作爲邏輯,將它作爲一個獨立於GUI的層也是一個不錯的主意。

除非你需要QWidget作爲別的東西,否則絕對沒有理由使用QQuickWidget,因此你可以避免整個小部件模塊作爲依賴。您不需要小部件來在C++中執行核心邏輯。

3

當你想要得到的東西快速啓動和運行做在QML的樓內設有商務邏輯是一個很好的路要走。但添加新功能時事情會變得複雜。過了一段時間,我們通過依賴QML文件中的信號插槽獲得了很多級聯回調。特別是在一個QML文件中混合視圖和商業代碼時會使代碼難以維護。

爲了避免這種情況,使用某種MVC或MVVM模式將buisness-logic與您的視圖代碼分離開來。當然,你可以在QML中做buissness邏輯。關注問題的分離有助於保持您的代碼基礎可以獨立於您的編程語言。

如果您有任何關於使用C++的buisness-logic的性能問題,那麼這是最好的方法(在QML中的第一個原型開始並需要將它移植到嵌入式平臺時進行這些體驗)。當然你也可以使用C++來處理一些特殊的QML元素。

所以它很大程度上取決於你的問題。