SlideShare a Scribd company logo
1 of 28
QML 與 C++ 的美麗邂逅
Jack Yang
jackyang5000@gmail.com
回顧一下...QML 是什麼 ?
● 描述性語言
● property, method, signal
● javascript 控制
Ref: http://www.slideshare.net/jackyang5000/hello-qml-42873653
import QtQuick 2.3
import QtQuick.Window 2.2
Window {
visible: true
width: 360
height: 360
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
Text {
text: qsTr("Hello World")
anchors.centerIn: parent
}
}
複雜一些, 我們可以做到這樣...
有了 QML 還需要 C++ ?
如果要這樣...
或者這樣...
或這樣...
我們要如何讓 QML 使用這些功能 ?
● 透過 c++ 使用 third-party library
● 讓資料的擷取, 儲存, 操作更為方便
● Client/Server 架構
讓 Application 更 powerful~
首先, 我們所認識的彼此...
C++ class
● member variable
● member function
● event notify
QML type
● property
● function
● signal
一個 Qt C++ class 的概念
● Based on QObject
● Q_OBJECT
Tool: moc (meta-object compiler)
o moc 參考 c++ header, 產生出 moc_className.cpp
o moc_className.cpp 描述 signals, slot, property
Ref: http://doc.qt.io/qt-5/metaobjects.html
Qt C++ object 對應到 QML object
● member variable by Q_PROPERTY
o -> QML property
● member function by Q_INVOKABLE prefix
o -> QML function
● event notify define in signals
o -> QML signal
* property/function name 都小寫開頭
方法一: 將 C++ 嵌入至 QML
● QQmlContext::setContextObject
● QQmlContext::setContextProperty
Ref: http://doc.qt.io/qt-5/qtqml-cppintegration-
exposecppattributes.html
main.cpp
QML
方法二: 註冊成為一個 QML type
● QML object type
o Rectangle, Text, Image, ListModel…
● Object type from QML document
o MyButton.qml
● Object type from c++
o Register c++ object to QML
#include <QtQml>
qmlRegisterType<className>(url, version major,
version minor, qml name)
Ref: http://doc.qt.io/qt-5/qtqml-cppintegration-
definetypes.html
qmlRegisterType
main.cpp
main.qml
方法三: QML plugin dll
如何製作 ? by QtCreator
設定 class 名稱 & QML import 路徑
QML 啟動時, 會去 call 此 plugin 的 registerType
Ref: http://doc.qt.io/qt-5/qtqml-modules-cppplugins.html
qmldir
module HanGee.Hackathon (qml import 路徑)
plugin TestQmlExtPlugin (dll 名稱)
QML 如何使用 plugin dll ?
方法一:
方法二: 設環境變數
Windows:
set QML2_IMPORT_PATH=your_plugin_dir
Linux:
export QML2_IMPORT_PATH = /your_plugin_dir
開始讓你 QML 更強大吧 !!
工商服務
敏捷開發團隊生活的一二事...
http://vvtk-digest.blogspot.tw

More Related Content

Viewers also liked

QML 培訓課程 - 遊戲製作入門
QML 培訓課程  - 遊戲製作入門QML 培訓課程  - 遊戲製作入門
QML 培訓課程 - 遊戲製作入門diro fan
 
MakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorMakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorFred Chien
 
Designing Intelligent Content: A Writer's Guide
Designing Intelligent Content: A Writer's GuideDesigning Intelligent Content: A Writer's Guide
Designing Intelligent Content: A Writer's GuideNiki Blaker
 
Java8 stream
Java8 streamJava8 stream
Java8 streamkoji lin
 
Stem is JavaScript OS
Stem is JavaScript OSStem is JavaScript OS
Stem is JavaScript OSFred Chien
 
QML + Arduino & Leap Motion
QML + Arduino & Leap MotionQML + Arduino & Leap Motion
QML + Arduino & Leap Motiondiro fan
 
Qml 培訓課程 multi media
Qml 培訓課程   multi mediaQml 培訓課程   multi media
Qml 培訓課程 multi mediadiro fan
 
PHX Startup Week - Designing Intelligent Content for Entrepreneurs
PHX Startup Week - Designing Intelligent Content for EntrepreneursPHX Startup Week - Designing Intelligent Content for Entrepreneurs
PHX Startup Week - Designing Intelligent Content for EntrepreneursNiki Blaker
 
Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web FrameworkFred Chien
 
Let s Enjoy Node.js
Let s Enjoy Node.jsLet s Enjoy Node.js
Let s Enjoy Node.jsFred Chien
 
Stem OS Proposal
Stem OS ProposalStem OS Proposal
Stem OS ProposalFred Chien
 
軟體人甘苦談
軟體人甘苦談軟體人甘苦談
軟體人甘苦談Fred Chien
 
用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式Fred Chien
 
How to Write Node.js Module
How to Write Node.js ModuleHow to Write Node.js Module
How to Write Node.js ModuleFred Chien
 
Jscex:案例、阻碍、体会、展望
Jscex:案例、阻碍、体会、展望Jscex:案例、阻碍、体会、展望
Jscex:案例、阻碍、体会、展望jeffz
 
大话程序员可用的算法
大话程序员可用的算法大话程序员可用的算法
大话程序员可用的算法jeffz
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)jeffz
 

Viewers also liked (20)

QML 培訓課程 - 遊戲製作入門
QML 培訓課程  - 遊戲製作入門QML 培訓課程  - 遊戲製作入門
QML 培訓課程 - 遊戲製作入門
 
QML + Node.js
QML + Node.jsQML + Node.js
QML + Node.js
 
MakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorMakerBoard: MT7688 Emulator
MakerBoard: MT7688 Emulator
 
Designing Intelligent Content: A Writer's Guide
Designing Intelligent Content: A Writer's GuideDesigning Intelligent Content: A Writer's Guide
Designing Intelligent Content: A Writer's Guide
 
Java8 stream
Java8 streamJava8 stream
Java8 stream
 
Stem is JavaScript OS
Stem is JavaScript OSStem is JavaScript OS
Stem is JavaScript OS
 
QML + Arduino & Leap Motion
QML + Arduino & Leap MotionQML + Arduino & Leap Motion
QML + Arduino & Leap Motion
 
Qml 培訓課程 multi media
Qml 培訓課程   multi mediaQml 培訓課程   multi media
Qml 培訓課程 multi media
 
PHX Startup Week - Designing Intelligent Content for Entrepreneurs
PHX Startup Week - Designing Intelligent Content for EntrepreneursPHX Startup Week - Designing Intelligent Content for Entrepreneurs
PHX Startup Week - Designing Intelligent Content for Entrepreneurs
 
Non-MVC Web Framework
Non-MVC Web FrameworkNon-MVC Web Framework
Non-MVC Web Framework
 
OwaNEXT
OwaNEXTOwaNEXT
OwaNEXT
 
Let s Enjoy Node.js
Let s Enjoy Node.jsLet s Enjoy Node.js
Let s Enjoy Node.js
 
Stem OS Proposal
Stem OS ProposalStem OS Proposal
Stem OS Proposal
 
軟體人甘苦談
軟體人甘苦談軟體人甘苦談
軟體人甘苦談
 
App house
App houseApp house
App house
 
用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式用最潮的 Java script 盡情開發 kde qt 程式
用最潮的 Java script 盡情開發 kde qt 程式
 
How to Write Node.js Module
How to Write Node.js ModuleHow to Write Node.js Module
How to Write Node.js Module
 
Jscex:案例、阻碍、体会、展望
Jscex:案例、阻碍、体会、展望Jscex:案例、阻碍、体会、展望
Jscex:案例、阻碍、体会、展望
 
大话程序员可用的算法
大话程序员可用的算法大话程序员可用的算法
大话程序员可用的算法
 
The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)The Evolution of Async Programming (GZ TechParty C#)
The Evolution of Async Programming (GZ TechParty C#)
 

Similar to QML 與 C++ 的美麗邂逅

Overview - QML and C++ Integration
Overview - QML and C++ IntegrationOverview - QML and C++ Integration
Overview - QML and C++ IntegrationYun-Lin Huang
 
使用Qt+和open gl®+创建跨平台可视化ui
使用Qt+和open gl®+创建跨平台可视化ui使用Qt+和open gl®+创建跨平台可视化ui
使用Qt+和open gl®+创建跨平台可视化uilsdsjy
 
Overview - QML and C++ Integration
Overview - QML and C++ IntegrationOverview - QML and C++ Integration
Overview - QML and C++ IntegrationYun-Lin Huang
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUGYingSiang Geng
 
181201_CoAP_coding365
181201_CoAP_coding365181201_CoAP_coding365
181201_CoAP_coding365Peter Yi
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構Mu Chun Wang
 
Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇bluedavy lin
 
網頁三本柱最終章Javascript與jquery
網頁三本柱最終章Javascript與jquery網頁三本柱最終章Javascript與jquery
網頁三本柱最終章Javascript與jqueryAaron King
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Chu-Siang Lai
 
微博平台混合云实践 - Docker全架构
微博平台混合云实践 - Docker全架构微博平台混合云实践 - Docker全架构
微博平台混合云实践 - Docker全架构Chen Fei
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless Rick Hwang
 
Different QTP.v3
Different QTP.v3Different QTP.v3
Different QTP.v3Dean Lee
 
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptxNCUDSC
 
Python&GUI
Python&GUIPython&GUI
Python&GUILeo Zhou
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC
 
腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3areyouok
 
腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3topgeek
 

Similar to QML 與 C++ 的美麗邂逅 (20)

全新的Qt5
全新的Qt5全新的Qt5
全新的Qt5
 
Overview - QML and C++ Integration
Overview - QML and C++ IntegrationOverview - QML and C++ Integration
Overview - QML and C++ Integration
 
使用Qt+和open gl®+创建跨平台可视化ui
使用Qt+和open gl®+创建跨平台可视化ui使用Qt+和open gl®+创建跨平台可视化ui
使用Qt+和open gl®+创建跨平台可视化ui
 
Overview - QML and C++ Integration
Overview - QML and C++ IntegrationOverview - QML and C++ Integration
Overview - QML and C++ Integration
 
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
探索 ISTIO 新型 DATA PLANE 架構 AMBIENT MESH - GOLANG TAIWAN GATHERING #77 X CNTUG
 
181201_CoAP_coding365
181201_CoAP_coding365181201_CoAP_coding365
181201_CoAP_coding365
 
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
模糊也是一種美 - 從 BlurHash 探討前後端上傳圖片架構
 
Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇Sun jdk 1.6内存管理 -使用篇
Sun jdk 1.6内存管理 -使用篇
 
網頁三本柱最終章Javascript與jquery
網頁三本柱最終章Javascript與jquery網頁三本柱最終章Javascript與jquery
網頁三本柱最終章Javascript與jquery
 
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
Continuous Delivery Workshop with Ansible x GitLab CI (3rd)
 
微博平台混合云实践 - Docker全架构
微博平台混合云实践 - Docker全架构微博平台混合云实践 - Docker全架构
微博平台混合云实践 - Docker全架构
 
Ops as Code using Serverless
Ops as Code using Serverless Ops as Code using Serverless
Ops as Code using Serverless
 
Hello openstack 2014
Hello openstack 2014Hello openstack 2014
Hello openstack 2014
 
Different QTP.v3
Different QTP.v3Different QTP.v3
Different QTP.v3
 
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
 
Python&GUI
Python&GUIPython&GUI
Python&GUI
 
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
 
腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3
 
腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3腾讯大讲堂46 自由cgi之路v3
腾讯大讲堂46 自由cgi之路v3
 
老舊web上雲端
老舊web上雲端老舊web上雲端
老舊web上雲端
 

QML 與 C++ 的美麗邂逅