Qt 與 Web

簡單 survey 了如果一個 Qt application,想要不改或者少部份改 code 就能在網頁上執行的方式。其中也混合了 Qt application 與網頁 js 互動的技術。

---

QtWebApp - Qt 的 http server
http://stefanfrings.de/qtwebapp/index-en.html
可以用來在程式裡開發 http 的應用,可直接在 Qt 程式接收 client request 過來的資料並回應成 html。附 file logger 可將 log 記錄成檔案。

Qt WebChannel
http://doc.qt.io/qt-5/qtwebchannel-index.html
QObject 可透過 web channel expose 給 client。Client 只需引用 qt web channel javascript 檔便可存取 QObject 的 slot/signal。

Qt WebEngine
在 QWidget 裡頭顯示 web page。qt web engine 預設要使用硬體加速,其內部使用 skia 繪圖函式庫,它並沒有 QPainter 這樣的東西產生。
http://doc.qt.io/qt-5/qtwebenginewidgets-qtwebkitportingguide.html

Qt for Native Client
將 Qt app 編譯成 portable NaCl 格式,讓 chrome browser 載入。也支援 Qt Quick app。瀏覽器第一次載入時會花較多時間。
https://wiki.qt.io/Qt_for_Google_Native_Client
https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cad=rja&uact=8&ved=0ahUKEwjxt_yz6ODXAhWCipQKHdYQD5gQFggxMAE&url=http%3A%2F%2Fblog.qt.io%2Fblog%2F2015%2F09%2F25%2Fqt-for-native-client-and-emscripten%2F&usg=AOvVaw2lrU2wJFnVC3LmLBS0w95J

Qt WebGL Streaming Plugin
http://blog.qt.io/blog/2017/02/22/qt-quick-webgl-streaming/
Qt 5.10 才 preview 的技術。將 Qt quick 上的 OpenGL 呼叫全部轉成 WebGL 至 client 瀏覽器處理。不同的 client 瀏覽器由不同的 QWindow 來處理,input event 不會互相影響。

qmlweb
https://github.com/qmlweb/qmlweb
在網頁載入 QML。透過載入 qmlweb.js,new 出類別來載入 qml。網頁中最下面的 Related efforts 還有提到其餘幾個類似的方案,並提供分析可參考。

土砲法
透過 unix socket 與網頁上的 PHP 溝通,處理 client request。Client 則是利用 Qt application 輸出至 http server (lighttpd) 的 www 目錄,讓 client 進行瀏覽。原則上網頁語言只要是能夠支援 unix socket 的都可以。

---

當然,直接用 VNC 更快啦(如果你老闆願意的話)。

留言

熱門文章