狠狠撸

狠狠撸Share a Scribd company logo
全新的蚕迟5
Qt5帶來的全新功能,模塊和開發模型,將使Qt擁有更美好的未來



              殷允嶠 Charles Yin
         developer @ QML Core Team
           yinyunqiao@gmail.com
自我介紹/About me
? 殷允嶠 (Charles Yin)
? 現居住在澳大利亞昆士蘭州的布里斯班
? 2009年加入Qt Brisbane R&D lab
? 曾經參與的項目
   1. 短暫維護QtSql模塊
   2. Qt Mobility項目中QtContacts, QtOrganizer, QtVersit和
      QtFeedback的研發
   3. 2010年加入QML Core team, 主要負責QtQuickTest研發和維
      護, Canvas組件的設計和實現,QtQuick2 Animation部分的重寫,
      並參與部分性能調整的工作
? 聯絡我: gmail/gtalk/facebook yinyunqiao@gmail.com, twitter:
  yinyunqiao, linkedin: yinyunqiao, IRC@freenode: chayin
Qt5新開發模型:模塊化
git代碼倉庫                                              git://gitorious.org/qt/qlalr.git
                                                     git://gitorious.org/qt/qt3support.git
 https://codereview.qt-project.org/#admin,projects   git://gitorious.org/qt/qtactiveqt.git
                                                     git://gitorious.org/qt/qtbase.git
 http://qt.gitorious.org/                            git://gitorious.org/qt/qtdeclarative.git
                                                     git://gitorious.org/qt/qtdoc.git
                                                     git://gitorious.org/qt/qtmultimedia.git
$ git clone git://gitorious.org/qt/qt5.git           git://gitorious.org/qt/qtphonon.git
$ ./init-repository                                  git://gitorious.org/qt/qtqa.git
                                                     git://gitorious.org/qt/qtrepotools.git
                                                     git://gitorious.org/qt/qtscript.git
                                                     git://gitorious.org/qt/qtsvg.git
                                                     git://gitorious.org/qt/qttools.git
                                                     git://gitorious.org/qt/qttranslations.git
                                                     git://gitorious.org/webkit/qtwebkit.git
                                                     git://gitorious.org/qt/qtwebkit-examples-and-demos.git
                                                     git://gitorious.org/qt/qtxmlpatterns.git
                                                     …
Qt5基本模塊 / Qt5 Essentials Modules

                                   QtWebkit



                 QtMultiMedia
QtTest   QtSql

                 QtQml                        QtQuick


                   QtNetwork                       QtGui


                          QtCore
QtCore: 全新的信號-槽(Signal-Slot)語法

先來溫習一下傳統的信號/槽語法:


connect(sender, SIGNAL(valueChanged(QString,QString)),
        receiver, SLOT(updateValue(QString)) );
QtCore: 全新的信號-槽(Signal-Slot)語法

connect(sender, SIGNAL(valueChanged(QString,QString)),
        receiver, SLOT(updateValue(QString)) );



問題:
? 缺少編譯期語法檢查: 宏 + 字符串
? 對C++類型系統不友好: typedef, namespace, etc.
? 潛在的性能損失: 運行時解析字符串
QtCore: 全新的信號-槽(Signal-Slot)語法

connect(sender, SIGNAL(valueChanged(QString,QString)),
        receiver, SLOT(updateValue(QString)) );




connect(sender, &Sender::valueChanged,
        receiver, &Receiver::updateValue );
QtCore: 全新的信號-槽(Signal-Slot)語法

  connect(sender, &Sender::valueChanged,
          receiver, &Receiver::updateValue );



 ? 更符合現代C++語法
                                It’s nicer
                                  now!
The pervasive use of macros in C is probably the
major reason we didn't have excellent C++
development environments a decade ago. -
Bjarne Stroustrup
QtCore: 全新的信號-槽(Signal-Slot)語法

 connect(sender, &Sender::valueChanged,
         receiver, &Receiver::updateValue );


? 編譯期檢查: C++類成員函數指針, 錯誤的信號/槽鏈接將產生
  編譯期錯誤而不是運行時警告
   ? 拼寫錯誤
   ? 類型不匹配
   ? 代碼重構
   ? 將可以更多使用 static_assert: 比如當缺少Q_OBJECT時
QtCore: 全新的信號-槽(Signal-Slot)語法

connect(sender, &Sender::valueChanged,
        receiver, &Receiver::updateValue );


? 參數類型自動轉換
 class Test : public QObject {
           Q_OBJECT
 public: Test() {
             connect(this, &Test::someSignal, this, &Test::someSlot);
           }
  signals:
           void someSignal(const QString &);
 public:
              void someSlot(const QVariant &);
 };
QtCore: 全新的信號-槽(Signal-Slot)語法

connect(sender, &Sender::valueChanged,
        receiver, &Receiver::updateValue );


? 任何函數都可成為槽函數, slot 關鍵字, Q_SLOTS宏都將成為過去

 static void someFunction() { qDebug() << "pressed"; }

 // ...
 QObject::connect(button, &QPushButton::clicked, someFunction);
QtCore: 全新的信號-槽(Signal-Slot)語
法
 connect(sender, &Sender::valueChanged,
         receiver, &Receiver::updateValue );

? 使用C++11 lambda匿名函數來編寫槽函數


  QObject::connect(dlg, &QDialog::finished, [=](int result) {
      if (result) {
         QFile file(dlg->selectedFiles().first());
         // ... save document here ... }
        dlg->deleteLater();
  });
QtCore: C++11
?   使用C++11 lambda匿名函數來編寫槽函數
?   更好的Unicode字符串常量 QStringLiteral
?   Q_DECL_CONSTEXPR for constexpr
?   Q_STATIC_ASSERT and Q_STATIC_ASSERT_X
?   auto
?   右值引用/移動構造函數
?   More…

             CONFIG += c++11
QtCore: JSON
?   QJsonArray
?   QJsonDocument
?   QJsonObject
?   QJsonParseError
?   QJsonValue
?   QJsonObject:iterator


       擴展模塊QJsonDB :
         構建在JSON庫之上的高性能Key-Value數據庫
QtGui
       QtQuick2                      QtWebkit               QtQuick1                QWidget



           Scene graph (in qtdeclarative)                                      QPainter
                                                         QBacking
                                                          Store
QSurface                    QOpenGL                                    QFont       QImage       …


 QWindow            QScreen        QOpenGLContext          QAccessible         QInputMethod


                                QPA (Qt platform abstraction)

 Win          Mac          Wayland          X11         Symbian          Android            …
QtGui: QPA (Qt平台抽象層)
讓Qt可以無處不在的秘密武器!




       尝颈驳丑迟贬辞耻蝉别项目
QtGui: QPA (Qt平台抽象層)
唯一的限制是你的想像力!

           Qt/Caca
http://blog.forwardbias.in/2011/07/q
     tcaca-lighthouse-plugin.html
QtGui: QPA (Qt平台抽象層)
使得迅速移植到新的系統平台成為可能!



“Digia plans to quickly enable Qt on
Android, iOS and Windows 8 platforms”
       http://www.digia.com/Qt/About-us/News/Digia-to-Acquire-Qt-from-Nokia/
QtGui: QPA (Qt平台抽象層)
qtbasesrcpluginsplatforms

Cocoa                          Minimal/minimalGL
Directfb                       Qnx
                               Windows
Eglfs
                               Xcb
Kms                            Openwfd
Linuxfb
QtGui: QPA (Qt平台抽象層)
     通過QPA可以控制的GUI功能:

?   Event dispatcher         ?   Clipboard
?   Platform window          ?   Drag
?   Platform backing store   ?   Input method
?   Image paint engine       ?   Accessibility
?   OpenGL context           ?   Platform theme
?   Font database
QtGui: QPA (Qt平台抽象層)
編寫自己的QPA plugin?

 #include <qpa/qplatformintegration.h>

 class QMyQPAIntegration : public QPlatformIntegration {
 public:
          QMyQPAIntegration ();
          QAbstractEventDispatcher *guiThreadEventDispatcher() const;
          QPlatformWindow *createPlatformWindow(QWindow *window) const;
          QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;

          bool hasCapability(QPlatformIntegration::Capability cap) const;
          QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const;
          QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const;
          QPaintEngine *createImagePaintEngine(QPaintDevice *paintDevice) const;
          //…
 };
QtGui: OpenGL
OpenGL現在是QtGUI的一部分,不再通過
單獨的OpenGL模塊提供
?   QOpenGLContext
?   QOpenGLFramebufferObject
?   QOpenGLShaderProgram
?   QOpenGLFunctions
?   QOpenGLPaintDevice
?   …

原有的OpenGL類通過單獨的QtOpenGL擴展模塊提供
QtQml & QtQuick


                     QtQml



     QtDeclarative



                     QtQuick
QtQml & QtQuick in Qt4.x

       QtDeclarative (QML/QtQuick)

                      QGraphicsView
  QtScript
                          QPainter

               Raster Engine       GL Engine
    JSC
                           QtGui
QtQml & QtQuick in Qt5

                   QtQuick
   QtQml
                 Scene graph
                 QWindowSurface
  V8     V4       (OpenGL (ES) 2.0)


  QtNetwork          QtGui

   QtCore             QPA
QtQml


? QML語言核心模塊

? 不再依賴QtQui, 僅依賴QtCore和QtNetwork

? 命令行/服務器端QML開發?
QtQml: Javascript engine


  ? JavascriptCore (JSC) => V8
     ? QtV8Private (qtjsbackend.git)
     ? 更快,更好的GC,優秀的API設計

  ? 不再通過QtScript中間層使用Javascript API
QtQml: V4, QML內部的Binding優化


 ? 一個輕量級的Javascript引擎

 ? 僅用於QML property binding優化目的

 ? 比V8還快得多,也小得多
QtQml: QML加載和編譯優化


 ? 加載和編譯均可異步完成

  ? Qt.createComponent() with Component.Asynchronous
  ? Loader {asynchronous:true}
QtQml: 其他增強
? property variant => property var

? Value types
   ? QColor
   ? Sequence                                            types:
     QList<int>, QList<qreal>, QList<bool>, QList<QUrl>, QList<
     QString> and QStringList

? Module API
   ? qmlRegisterModuleApi()

? Javascript import “.import”
QtQuick 2.0



     How was QtQuick 2.0 developed?

     s/QDeclarative/QQuick/g
QtQuick 2.0

? 基於OpenGL scene graph完全重寫全部類

? public C++ APIs
   ? QQuickView
   ? QQuickWindow
   ? QQuickItem
   ? QQuickPaintedItem
Scene Graph
Scene Graph




                        QQuickItem::updatePaintNode(…)




(Rendering thread) Scene graph rendering nodes           (Main thread) QML Items
Scene Graph

Node types:

?   Root node
?   Basic node
?   Geometry node
?   Transform node
?   Clip node
?   Opacity node
Scene Graph

    public APIs:

    ?   QSGNode and subclasses
    ?   QSGNodeVisitor
    ?   QSGGeometry
    ?   QSGMaterial
    ?   QSGMaterialShader
    ?   QSGTexture
QtQuick 2.0

Canvas item

 import QtQuick 2.0
 Canvas {
   id:canvas
   width:200
   height:200
   contextType:”2d”
   onPaint : {
        var ctx = context;
         //or var ctx = canvas.getContext(“2d”);
         //use the HTML5 context2d API to draw anything you like
   }
 }
QtQuick 2.0
  Canvas item

? Render targets: Canvas.Image, Canvas.FramebufferObject

? Render strategies: Canvas.Immediate, Canvas.Cooperative,
  Canvas.Threaded

? Tiled rendering: tileSize, canvasSize, canvasWindow
QtQuick 2.0
 Animations

? 完全重寫,不再依賴QtCore animation framework

? 優化內存佔用和執行性能

? 新的動畫元素
  ? AnimationController
  ? SpriteSequence
  ? Sprite
  ? AnimatedSprite
QtQuick 2.0
  Text

? Text Rendering in the QML Scene Graph
  http://labs.qt.nokia.com/2011/07/15/text-rendering-in-the-qml-
  scene-graph/
QtQuick 2.0
粒子動畫系統 Particle System

                        ParticleSystem
                       container/timer


     ParticlePainter                         Emmiter
    render particles                      create particles



                           Affector
                        alter particles
QtQuickTest: unit test in QML
Write Quickly => Run Quickly => Test Quickly

import QtQuick 2.0
import QtTest 1.0

TestCase {
  name: "BasicTests"
  function test_pass() {
     compare(2 + 2, 4, "2 + 2")
   }
}
QtQuickTest: unit test in QML

 ? TestCase

 ? SignalSpy

 ? Data driven test

 ? QTest compatible APIs

 ? more in qtdeclarativetestsautoqmltest
Qt5擴展模塊 / Qt5 Add-ons Modules
30+ 擴展模塊:http://qt-project.org/wiki/Qt-Add-ons-Modules

源自 Qt Mobility:
QtContacts, QtOrganizer, QtVersit, QtLocation, QtBluetooth, QtSens
ors,QtServiceFramework, QtSystemInfo, QtPublishAndSubscribe, Qt
Feedback
源自 Qt4.x: QtConcurrent, QtDBus, QtImageFormats, QtOpenGL,
QtPrintSupport,QtQuick1, QtScript, QtScriptTools, QtSVG, QtTools,
QtWidgets, QtXML, QtXMLPatterns, QtWebkitWidgets

新增: Qt3D, QtGraphicalEffects, QtJsbackend, QtWayland,
QtJsonDB
Demos
New QML Demos in Qt5
                   OpenGL Shaders
                   Distance Field
                   High-Quality Anti-Aliasing
New QML Demos in Qt5

                  Qt5自帶QML演示程序

                  ?    Shader effects
                  ?    Animated sprites
                  ?    Particle system
                  ?    Canvas
                  ?    Animations
                  ?    Localstorage
                  ?    XMLHttpRequest

                  Checkout:
                  qtdeclarativeexamplesdemos
New QML Demo in Qt5

                      QtQuick 2.0

                      QtMultimedia

                      QtGraphicalEffects
New QML Demos in Qt5


 更多Qt5演示請到Youtube QtStudios頻道觀
 看,或者搜索Qt5關鍵字。

 http://www.youtube.com/user/qtstudios
全新開發模式 Open Governence
Model

 所有開發活動都在NPO非盈利組織 qt-project.org下完成
 Home: http://qt-project.org
 Code review/CI : http://codereview.qt-project.org
 Bug tracking : http://bugreports.qt-project.org
 Mail list: http://lists.qt-project.org
 Wiki: http://wiki.qt-project.org
 Forum : http://qt-project.org/forums
 Doc : http://qt-project.org/doc
全新開發模式 Open Governence
Model
全新開發模式 Open Governence
Model
                Contributors
?   任何人都可成為qt-project的貢獻者,只要:
?   在bugreports.qt-project.org註冊一個帳號來代表自己
?   訂閱 http://lists.qt-project.org 的郵件列表來參與討論
?   在bugreports.qt-project.org上提交缺陷報告/功能建議
?   在codereview.qt-project.org 提交修復缺陷/新功能的代碼
?   在codereview.qt-project.org上審查別人的代碼
?   編寫文檔/參與討論
?   在論壇/郵件列表/IRC上回答熱情的菜鳥的提問
?   參與各類社區的活動來幫助推廣Qt
全新開發模式 Open Governence
Model
           Approvers
? 有權在他/她了解的範圍內檢查/批准其他人貢獻的代碼
? 當提交代碼時,Approvers不享有特權,他/她們的代碼同樣
  需要別人的檢查和許可,除了極少數例外情況
? 當拒絕別人的代碼時,Approver有義務給出詳細和建設性的意見
? Approver應該積極參與各類社區討論
? 活躍的Contributors通過提名可以成為Approvers
? 幹得不好會被收回權限 ?
全新開發模式 Open Governence
Model
                Maintainers

   ?   Qt各個功能/模塊的技術領導者
   ?   對該負責領域的代碼質量負責
   ?   負責參與討論和制定該部分的發展方向
   ?   是該功能/模塊的默認代碼審查者


        當前Qt項目各個模塊的Maintainers
        http://qt-project.org/wiki/maintainers
全新開發模式 Open Governance
Model
       Chief Maintainer

   ? Qt最高技術決策者
   ? 維護Qt Open Governance Model正常運作
   ? 對Qt的發展做計劃
Qt Brisbane
? 50+ 軟件工程師
? 曾經負責開發Qtopia和後續的QtMobility項目
? QML/QtQuick的老家
? 現在負責的項目有
   ? Qt3D
   ? QtLocation
   ? QtDeclarative
   ? QtMultimedia
   ? QtSensors
   ? QtSystems
   ? Qt QA team
   ? CI /Release/JIRA
? Approvers/Maintainers權限將保留
? We are looking for new career opportunities!
Qt的未來

? qt-project.org 開放的開發模型,活躍的開源社區
? 開放靈活的授權: GPL/LGPL 或者商業授權
? 龐大的基於Qt的項目數量:
   ? KDE, Maya, Skype, VLC, VirtualBox, Mathmatica,
      Dreamworks, Blackberry10, Adobe Photoshop Elements,
      Opera (Linux), Googe Earth
? 投資Qt技術的眾多公司
問
題?

More Related Content

What's hot (20)

QML + Arduino & Leap Motion
QML + Arduino & Leap MotionQML + Arduino & Leap Motion
QML + Arduino & Leap Motion
diro fan
?
骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发
Michael Yan
?
Noder eyes for frontend guys
Noder eyes for frontend guysNoder eyes for frontend guys
Noder eyes for frontend guys
Hsu Ping Feng
?
不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServ
Ben Lue
?
NSCTF
NSCTFNSCTF
NSCTF
Yi Tseng
?
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人
Fred Chien
?
PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)
PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)
PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)
Jen Yee Hong
?
Getting started with test automation
Getting started with test automationGetting started with test automation
Getting started with test automation
Ivan Wei
?
Phantom js介绍
Phantom js介绍Phantom js介绍
Phantom js介绍
Liu Allen
?
MakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorMakerBoard: MT7688 Emulator
MakerBoard: MT7688 Emulator
Fred Chien
?
基于Android ndk的软件开发介绍 放映
基于Android ndk的软件开发介绍 放映基于Android ndk的软件开发介绍 放映
基于Android ndk的软件开发介绍 放映
heyfluke
?
Background processing after android O ft. WorkManager
Background processing after android O ft. WorkManagerBackground processing after android O ft. WorkManager
Background processing after android O ft. WorkManager
Carter Chen
?
在 golang 中透過組合語言實作 SIMD
在 golang 中透過組合語言實作 SIMD在 golang 中透過組合語言實作 SIMD
在 golang 中透過組合語言實作 SIMD
YangHao Yuan
?
搁飞诲开发小工具
搁飞诲开发小工具搁飞诲开发小工具
搁飞诲开发小工具
翔宇 蘇
?
使用闯补惫补蝉肠谤颈辫迟及贬罢惭尝5打造协同运作系统
使用闯补惫补蝉肠谤颈辫迟及贬罢惭尝5打造协同运作系统使用闯补惫补蝉肠谤颈辫迟及贬罢惭尝5打造协同运作系统
使用闯补惫补蝉肠谤颈辫迟及贬罢惭尝5打造协同运作系统
Hsu Ping Feng
?
用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》
用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》
用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》
鍾誠 陳鍾誠
?
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
LainZQ
?
叠濒别苍诲4飞别产研究--代码结构
叠濒别苍诲4飞别产研究--代码结构叠濒别苍诲4飞别产研究--代码结构
叠濒别苍诲4飞别产研究--代码结构
gastrodia
?
QML + Arduino & Leap Motion
QML + Arduino & Leap MotionQML + Arduino & Leap Motion
QML + Arduino & Leap Motion
diro fan
?
骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发骋谤补颈濒蝉敏捷项目开发
骋谤补颈濒蝉敏捷项目开发
Michael Yan
?
Noder eyes for frontend guys
Noder eyes for frontend guysNoder eyes for frontend guys
Noder eyes for frontend guys
Hsu Ping Feng
?
不一樣的Web server... coServ
不一樣的Web server... coServ不一樣的Web server... coServ
不一樣的Web server... coServ
Ben Lue
?
Koa 正在等一個人
Koa 正在等一個人Koa 正在等一個人
Koa 正在等一個人
Fred Chien
?
PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)
PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)
PIME - 用 Python 快速開發 Windows 的中文輸入法 (COSCUP 2015)
Jen Yee Hong
?
Getting started with test automation
Getting started with test automationGetting started with test automation
Getting started with test automation
Ivan Wei
?
Phantom js介绍
Phantom js介绍Phantom js介绍
Phantom js介绍
Liu Allen
?
MakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorMakerBoard: MT7688 Emulator
MakerBoard: MT7688 Emulator
Fred Chien
?
基于Android ndk的软件开发介绍 放映
基于Android ndk的软件开发介绍 放映基于Android ndk的软件开发介绍 放映
基于Android ndk的软件开发介绍 放映
heyfluke
?
Background processing after android O ft. WorkManager
Background processing after android O ft. WorkManagerBackground processing after android O ft. WorkManager
Background processing after android O ft. WorkManager
Carter Chen
?
在 golang 中透過組合語言實作 SIMD
在 golang 中透過組合語言實作 SIMD在 golang 中透過組合語言實作 SIMD
在 golang 中透過組合語言實作 SIMD
YangHao Yuan
?
搁飞诲开发小工具
搁飞诲开发小工具搁飞诲开发小工具
搁飞诲开发小工具
翔宇 蘇
?
使用闯补惫补蝉肠谤颈辫迟及贬罢惭尝5打造协同运作系统
使用闯补惫补蝉肠谤颈辫迟及贬罢惭尝5打造协同运作系统使用闯补惫补蝉肠谤颈辫迟及贬罢惭尝5打造协同运作系统
使用闯补惫补蝉肠谤颈辫迟及贬罢惭尝5打造协同运作系统
Hsu Ping Feng
?
用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》
用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》
用十分鐘瞭解JavaScript的模組 -- 《還有關於npm套件管理的那些事情》
鍾誠 陳鍾誠
?
这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit这年头,你只需要懂Node webkit
这年头,你只需要懂Node webkit
LainZQ
?
叠濒别苍诲4飞别产研究--代码结构
叠濒别苍诲4飞别产研究--代码结构叠濒别苍诲4飞别产研究--代码结构
叠濒别苍诲4飞别产研究--代码结构
gastrodia
?

Viewers also liked (20)

Qt5 on ti processors
Qt5 on ti processorsQt5 on ti processors
Qt5 on ti processors
Prabindh Sundareson
?
Fibrosis Quística. Cristina Romero DelgadoFibrosis Quística. Cristina Romero Delgado
Fibrosis Quística. Cristina Romero Delgado
FarmaHospHUNSC
?
El Mas Alto Del MundoEl Mas Alto Del Mundo
El Mas Alto Del Mundo
kk DeLujo
?
Root Creative Group Portfolio
Root Creative Group PortfolioRoot Creative Group Portfolio
Root Creative Group Portfolio
Root Creative Group
?
Merix Capabilities Ext Na 1 09
Merix Capabilities Ext Na 1 09Merix Capabilities Ext Na 1 09
Merix Capabilities Ext Na 1 09
Rich Suriani
?
La tendencia de Cloud Computing. Nubes públicas, privadas e híbridas
La tendencia de Cloud Computing. Nubes públicas, privadas e híbridasLa tendencia de Cloud Computing. Nubes públicas, privadas e híbridas
La tendencia de Cloud Computing. Nubes públicas, privadas e híbridas
Mundo Contact
?
El porfiriato    (d.a.v.a.o)El porfiriato    (d.a.v.a.o)
El porfiriato (d.a.v.a.o)
fuckyeah1488
?
Curation Technologies for Multilingual Europe
Curation Technologies for Multilingual EuropeCuration Technologies for Multilingual Europe
Curation Technologies for Multilingual Europe
Georg Rehm
?
Ali divandari’s art work
Ali divandari’s art workAli divandari’s art work
Ali divandari’s art work
M. Divandari
?
Pka praesentation 14_03_2011Pka praesentation 14_03_2011
Pka praesentation 14_03_2011
kathrinniedermoser
?
M-Learning. La sinergia de la educación a distancia y los dispositivos móviles.M-Learning. La sinergia de la educación a distancia y los dispositivos móviles.
M-Learning. La sinergia de la educación a distancia y los dispositivos móviles.
vpmarti
?
Grupo 3 a  tejón ( Meles meles)Grupo 3 a  tejón ( Meles meles)
Grupo 3 a tejón ( Meles meles)
raquelgmur
?
Estandades en el aulaEstandades en el aula
Estandades en el aula
Luz Yaneth Pérez Guerrero
?
techniques of propaganda
techniques of propagandatechniques of propaganda
techniques of propaganda
jennifer joe
?
Curso Spring Roo Spring Data Jpa MavenCurso Spring Roo Spring Data Jpa Maven
Curso Spring Roo Spring Data Jpa Maven
Cristian Romero Matesanz
?
Formación del caracter del ni?oFormación del caracter del ni?o
Formación del caracter del ni?o
liasfe
?
Tema 8.La  revolución  rusa  y  la  URSSTema 8.La  revolución  rusa  y  la  URSS
Tema 8.La revolución rusa y la URSS
socialestolosa
?
贬颈辫é谤产辞濒补 贬颈辫é谤产辞濒补
贬颈辫é谤产辞濒补
Ariel Solis
?
EL PAPIROEL PAPIRO
EL PAPIRO
pilarmolinamartin
?
Fibrosis Quística. Cristina Romero DelgadoFibrosis Quística. Cristina Romero Delgado
Fibrosis Quística. Cristina Romero Delgado
FarmaHospHUNSC
?
El Mas Alto Del MundoEl Mas Alto Del Mundo
El Mas Alto Del Mundo
kk DeLujo
?
Merix Capabilities Ext Na 1 09
Merix Capabilities Ext Na 1 09Merix Capabilities Ext Na 1 09
Merix Capabilities Ext Na 1 09
Rich Suriani
?
La tendencia de Cloud Computing. Nubes públicas, privadas e híbridas
La tendencia de Cloud Computing. Nubes públicas, privadas e híbridasLa tendencia de Cloud Computing. Nubes públicas, privadas e híbridas
La tendencia de Cloud Computing. Nubes públicas, privadas e híbridas
Mundo Contact
?
El porfiriato    (d.a.v.a.o)El porfiriato    (d.a.v.a.o)
El porfiriato (d.a.v.a.o)
fuckyeah1488
?
Curation Technologies for Multilingual Europe
Curation Technologies for Multilingual EuropeCuration Technologies for Multilingual Europe
Curation Technologies for Multilingual Europe
Georg Rehm
?
Ali divandari’s art work
Ali divandari’s art workAli divandari’s art work
Ali divandari’s art work
M. Divandari
?
Pka praesentation 14_03_2011Pka praesentation 14_03_2011
Pka praesentation 14_03_2011
kathrinniedermoser
?
M-Learning. La sinergia de la educación a distancia y los dispositivos móviles.M-Learning. La sinergia de la educación a distancia y los dispositivos móviles.
M-Learning. La sinergia de la educación a distancia y los dispositivos móviles.
vpmarti
?
Grupo 3 a  tejón ( Meles meles)Grupo 3 a  tejón ( Meles meles)
Grupo 3 a tejón ( Meles meles)
raquelgmur
?
Estandades en el aulaEstandades en el aula
Estandades en el aula
Luz Yaneth Pérez Guerrero
?
techniques of propaganda
techniques of propagandatechniques of propaganda
techniques of propaganda
jennifer joe
?
Curso Spring Roo Spring Data Jpa MavenCurso Spring Roo Spring Data Jpa Maven
Curso Spring Roo Spring Data Jpa Maven
Cristian Romero Matesanz
?
Formación del caracter del ni?oFormación del caracter del ni?o
Formación del caracter del ni?o
liasfe
?
Tema 8.La  revolución  rusa  y  la  URSSTema 8.La  revolución  rusa  y  la  URSS
Tema 8.La revolución rusa y la URSS
socialestolosa
?
贬颈辫é谤产辞濒补 贬颈辫é谤产辞濒补
贬颈辫é谤产辞濒补
Ariel Solis
?

Similar to 全新的蚕迟5 (20)

Overview of Qt/QtQuick Testing, and Study for Qt GUI Automation Testing by Qt...
Overview of Qt/QtQuick Testing, and Study for Qt GUI Automation Testing by Qt...Overview of Qt/QtQuick Testing, and Study for Qt GUI Automation Testing by Qt...
Overview of Qt/QtQuick Testing, and Study for Qt GUI Automation Testing by Qt...
Yun-Lin Huang
?
使用Qt+和open gl?+创建跨平台可视化ui
使用Qt+和open gl?+创建跨平台可视化ui使用Qt+和open gl?+创建跨平台可视化ui
使用Qt+和open gl?+创建跨平台可视化ui
lsdsjy
?
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
Philip Zheng
?
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
?
Qt gui编程
Qt gui编程Qt gui编程
Qt gui编程
hangang123
?
Python&GUI
Python&GUIPython&GUI
Python&GUI
Leo Zhou
?
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
Weizhong Yang
?
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
勇浩 赖
?
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
?
Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024
Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024
Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024
Johnny Sung
?
探索 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
YingSiang Geng
?
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
Kito Cheng
?
Kubernetes device plugins
Kubernetes device pluginsKubernetes device plugins
Kubernetes device plugins
ssuser75c76a2
?
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
Will Huang
?
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC
?
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
Stipc Nsysu
?
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
CC
?
Introduction MQTT in Chinese
Introduction MQTT in ChineseIntroduction MQTT in Chinese
Introduction MQTT in Chinese
Eric Xiao
?
Overview of Qt/QtQuick Testing, and Study for Qt GUI Automation Testing by Qt...
Overview of Qt/QtQuick Testing, and Study for Qt GUI Automation Testing by Qt...Overview of Qt/QtQuick Testing, and Study for Qt GUI Automation Testing by Qt...
Overview of Qt/QtQuick Testing, and Study for Qt GUI Automation Testing by Qt...
Yun-Lin Huang
?
使用Qt+和open gl?+创建跨平台可视化ui
使用Qt+和open gl?+创建跨平台可视化ui使用Qt+和open gl?+创建跨平台可视化ui
使用Qt+和open gl?+创建跨平台可视化ui
lsdsjy
?
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
Philip Zheng
?
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
?
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
Weizhong Yang
?
Python 于 webgame 的应用
Python 于 webgame 的应用Python 于 webgame 的应用
Python 于 webgame 的应用
勇浩 赖
?
淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle淺談 Groovy 與 Gradle
淺談 Groovy 與 Gradle
Justin Lin
?
Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024
Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024
Kubernetes 地端自建 v.s. GKE,哪個更適合你? @Devfest Taipei 2024
Johnny Sung
?
探索 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
YingSiang Geng
?
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽COSCUP 2014 : open source compiler 戰國時代的軍備競賽
COSCUP 2014 : open source compiler 戰國時代的軍備競賽
Kito Cheng
?
Kubernetes device plugins
Kubernetes device pluginsKubernetes device plugins
Kubernetes device plugins
ssuser75c76a2
?
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
使用 TypeScript 駕馭 Web 世界的脫韁野馬:以 Angular 2 開發框架為例
Will Huang
?
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧twMVC#44 讓我們用 k6 來進行壓測吧
twMVC#44 讓我們用 k6 來進行壓測吧
twMVC
?
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
KSDG_007_Web 編程另闢蹊徑-GWT,Dart,TypeScript介紹與比較
Stipc Nsysu
?
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
CC
?
Introduction MQTT in Chinese
Introduction MQTT in ChineseIntroduction MQTT in Chinese
Introduction MQTT in Chinese
Eric Xiao
?

全新的蚕迟5

  • 1. 全新的蚕迟5 Qt5帶來的全新功能,模塊和開發模型,將使Qt擁有更美好的未來 殷允嶠 Charles Yin developer @ QML Core Team yinyunqiao@gmail.com
  • 2. 自我介紹/About me ? 殷允嶠 (Charles Yin) ? 現居住在澳大利亞昆士蘭州的布里斯班 ? 2009年加入Qt Brisbane R&D lab ? 曾經參與的項目 1. 短暫維護QtSql模塊 2. Qt Mobility項目中QtContacts, QtOrganizer, QtVersit和 QtFeedback的研發 3. 2010年加入QML Core team, 主要負責QtQuickTest研發和維 護, Canvas組件的設計和實現,QtQuick2 Animation部分的重寫, 並參與部分性能調整的工作 ? 聯絡我: gmail/gtalk/facebook yinyunqiao@gmail.com, twitter: yinyunqiao, linkedin: yinyunqiao, IRC@freenode: chayin
  • 3. Qt5新開發模型:模塊化 git代碼倉庫 git://gitorious.org/qt/qlalr.git git://gitorious.org/qt/qt3support.git https://codereview.qt-project.org/#admin,projects git://gitorious.org/qt/qtactiveqt.git git://gitorious.org/qt/qtbase.git http://qt.gitorious.org/ git://gitorious.org/qt/qtdeclarative.git git://gitorious.org/qt/qtdoc.git git://gitorious.org/qt/qtmultimedia.git $ git clone git://gitorious.org/qt/qt5.git git://gitorious.org/qt/qtphonon.git $ ./init-repository git://gitorious.org/qt/qtqa.git git://gitorious.org/qt/qtrepotools.git git://gitorious.org/qt/qtscript.git git://gitorious.org/qt/qtsvg.git git://gitorious.org/qt/qttools.git git://gitorious.org/qt/qttranslations.git git://gitorious.org/webkit/qtwebkit.git git://gitorious.org/qt/qtwebkit-examples-and-demos.git git://gitorious.org/qt/qtxmlpatterns.git …
  • 4. Qt5基本模塊 / Qt5 Essentials Modules QtWebkit QtMultiMedia QtTest QtSql QtQml QtQuick QtNetwork QtGui QtCore
  • 6. QtCore: 全新的信號-槽(Signal-Slot)語法 connect(sender, SIGNAL(valueChanged(QString,QString)), receiver, SLOT(updateValue(QString)) ); 問題: ? 缺少編譯期語法檢查: 宏 + 字符串 ? 對C++類型系統不友好: typedef, namespace, etc. ? 潛在的性能損失: 運行時解析字符串
  • 7. QtCore: 全新的信號-槽(Signal-Slot)語法 connect(sender, SIGNAL(valueChanged(QString,QString)), receiver, SLOT(updateValue(QString)) ); connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue );
  • 8. QtCore: 全新的信號-槽(Signal-Slot)語法 connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue ); ? 更符合現代C++語法 It’s nicer now! The pervasive use of macros in C is probably the major reason we didn't have excellent C++ development environments a decade ago. - Bjarne Stroustrup
  • 9. QtCore: 全新的信號-槽(Signal-Slot)語法 connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue ); ? 編譯期檢查: C++類成員函數指針, 錯誤的信號/槽鏈接將產生 編譯期錯誤而不是運行時警告 ? 拼寫錯誤 ? 類型不匹配 ? 代碼重構 ? 將可以更多使用 static_assert: 比如當缺少Q_OBJECT時
  • 10. QtCore: 全新的信號-槽(Signal-Slot)語法 connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue ); ? 參數類型自動轉換 class Test : public QObject { Q_OBJECT public: Test() { connect(this, &Test::someSignal, this, &Test::someSlot); } signals: void someSignal(const QString &); public: void someSlot(const QVariant &); };
  • 11. QtCore: 全新的信號-槽(Signal-Slot)語法 connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue ); ? 任何函數都可成為槽函數, slot 關鍵字, Q_SLOTS宏都將成為過去 static void someFunction() { qDebug() << "pressed"; } // ... QObject::connect(button, &QPushButton::clicked, someFunction);
  • 12. QtCore: 全新的信號-槽(Signal-Slot)語 法 connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue ); ? 使用C++11 lambda匿名函數來編寫槽函數 QObject::connect(dlg, &QDialog::finished, [=](int result) { if (result) { QFile file(dlg->selectedFiles().first()); // ... save document here ... } dlg->deleteLater(); });
  • 13. QtCore: C++11 ? 使用C++11 lambda匿名函數來編寫槽函數 ? 更好的Unicode字符串常量 QStringLiteral ? Q_DECL_CONSTEXPR for constexpr ? Q_STATIC_ASSERT and Q_STATIC_ASSERT_X ? auto ? 右值引用/移動構造函數 ? More… CONFIG += c++11
  • 14. QtCore: JSON ? QJsonArray ? QJsonDocument ? QJsonObject ? QJsonParseError ? QJsonValue ? QJsonObject:iterator 擴展模塊QJsonDB : 構建在JSON庫之上的高性能Key-Value數據庫
  • 15. QtGui QtQuick2 QtWebkit QtQuick1 QWidget Scene graph (in qtdeclarative) QPainter QBacking Store QSurface QOpenGL QFont QImage … QWindow QScreen QOpenGLContext QAccessible QInputMethod QPA (Qt platform abstraction) Win Mac Wayland X11 Symbian Android …
  • 17. QtGui: QPA (Qt平台抽象層) 唯一的限制是你的想像力! Qt/Caca http://blog.forwardbias.in/2011/07/q tcaca-lighthouse-plugin.html
  • 18. QtGui: QPA (Qt平台抽象層) 使得迅速移植到新的系統平台成為可能! “Digia plans to quickly enable Qt on Android, iOS and Windows 8 platforms” http://www.digia.com/Qt/About-us/News/Digia-to-Acquire-Qt-from-Nokia/
  • 19. QtGui: QPA (Qt平台抽象層) qtbasesrcpluginsplatforms Cocoa Minimal/minimalGL Directfb Qnx Windows Eglfs Xcb Kms Openwfd Linuxfb
  • 20. QtGui: QPA (Qt平台抽象層) 通過QPA可以控制的GUI功能: ? Event dispatcher ? Clipboard ? Platform window ? Drag ? Platform backing store ? Input method ? Image paint engine ? Accessibility ? OpenGL context ? Platform theme ? Font database
  • 21. QtGui: QPA (Qt平台抽象層) 編寫自己的QPA plugin? #include <qpa/qplatformintegration.h> class QMyQPAIntegration : public QPlatformIntegration { public: QMyQPAIntegration (); QAbstractEventDispatcher *guiThreadEventDispatcher() const; QPlatformWindow *createPlatformWindow(QWindow *window) const; QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const; bool hasCapability(QPlatformIntegration::Capability cap) const; QPlatformPixmap *createPlatformPixmap(QPlatformPixmap::PixelType type) const; QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const; QPaintEngine *createImagePaintEngine(QPaintDevice *paintDevice) const; //… };
  • 22. QtGui: OpenGL OpenGL現在是QtGUI的一部分,不再通過 單獨的OpenGL模塊提供 ? QOpenGLContext ? QOpenGLFramebufferObject ? QOpenGLShaderProgram ? QOpenGLFunctions ? QOpenGLPaintDevice ? … 原有的OpenGL類通過單獨的QtOpenGL擴展模塊提供
  • 23. QtQml & QtQuick QtQml QtDeclarative QtQuick
  • 24. QtQml & QtQuick in Qt4.x QtDeclarative (QML/QtQuick) QGraphicsView QtScript QPainter Raster Engine GL Engine JSC QtGui
  • 25. QtQml & QtQuick in Qt5 QtQuick QtQml Scene graph QWindowSurface V8 V4 (OpenGL (ES) 2.0) QtNetwork QtGui QtCore QPA
  • 26. QtQml ? QML語言核心模塊 ? 不再依賴QtQui, 僅依賴QtCore和QtNetwork ? 命令行/服務器端QML開發?
  • 27. QtQml: Javascript engine ? JavascriptCore (JSC) => V8 ? QtV8Private (qtjsbackend.git) ? 更快,更好的GC,優秀的API設計 ? 不再通過QtScript中間層使用Javascript API
  • 28. QtQml: V4, QML內部的Binding優化 ? 一個輕量級的Javascript引擎 ? 僅用於QML property binding優化目的 ? 比V8還快得多,也小得多
  • 29. QtQml: QML加載和編譯優化 ? 加載和編譯均可異步完成 ? Qt.createComponent() with Component.Asynchronous ? Loader {asynchronous:true}
  • 30. QtQml: 其他增強 ? property variant => property var ? Value types ? QColor ? Sequence types: QList<int>, QList<qreal>, QList<bool>, QList<QUrl>, QList< QString> and QStringList ? Module API ? qmlRegisterModuleApi() ? Javascript import “.import”
  • 31. QtQuick 2.0 How was QtQuick 2.0 developed? s/QDeclarative/QQuick/g
  • 32. QtQuick 2.0 ? 基於OpenGL scene graph完全重寫全部類 ? public C++ APIs ? QQuickView ? QQuickWindow ? QQuickItem ? QQuickPaintedItem
  • 34. Scene Graph QQuickItem::updatePaintNode(…) (Rendering thread) Scene graph rendering nodes (Main thread) QML Items
  • 35. Scene Graph Node types: ? Root node ? Basic node ? Geometry node ? Transform node ? Clip node ? Opacity node
  • 36. Scene Graph public APIs: ? QSGNode and subclasses ? QSGNodeVisitor ? QSGGeometry ? QSGMaterial ? QSGMaterialShader ? QSGTexture
  • 37. QtQuick 2.0 Canvas item import QtQuick 2.0 Canvas { id:canvas width:200 height:200 contextType:”2d” onPaint : { var ctx = context; //or var ctx = canvas.getContext(“2d”); //use the HTML5 context2d API to draw anything you like } }
  • 38. QtQuick 2.0 Canvas item ? Render targets: Canvas.Image, Canvas.FramebufferObject ? Render strategies: Canvas.Immediate, Canvas.Cooperative, Canvas.Threaded ? Tiled rendering: tileSize, canvasSize, canvasWindow
  • 39. QtQuick 2.0 Animations ? 完全重寫,不再依賴QtCore animation framework ? 優化內存佔用和執行性能 ? 新的動畫元素 ? AnimationController ? SpriteSequence ? Sprite ? AnimatedSprite
  • 40. QtQuick 2.0 Text ? Text Rendering in the QML Scene Graph http://labs.qt.nokia.com/2011/07/15/text-rendering-in-the-qml- scene-graph/
  • 41. QtQuick 2.0 粒子動畫系統 Particle System ParticleSystem container/timer ParticlePainter Emmiter render particles create particles Affector alter particles
  • 42. QtQuickTest: unit test in QML Write Quickly => Run Quickly => Test Quickly import QtQuick 2.0 import QtTest 1.0 TestCase { name: "BasicTests" function test_pass() { compare(2 + 2, 4, "2 + 2") } }
  • 43. QtQuickTest: unit test in QML ? TestCase ? SignalSpy ? Data driven test ? QTest compatible APIs ? more in qtdeclarativetestsautoqmltest
  • 44. Qt5擴展模塊 / Qt5 Add-ons Modules 30+ 擴展模塊:http://qt-project.org/wiki/Qt-Add-ons-Modules 源自 Qt Mobility: QtContacts, QtOrganizer, QtVersit, QtLocation, QtBluetooth, QtSens ors,QtServiceFramework, QtSystemInfo, QtPublishAndSubscribe, Qt Feedback 源自 Qt4.x: QtConcurrent, QtDBus, QtImageFormats, QtOpenGL, QtPrintSupport,QtQuick1, QtScript, QtScriptTools, QtSVG, QtTools, QtWidgets, QtXML, QtXMLPatterns, QtWebkitWidgets 新增: Qt3D, QtGraphicalEffects, QtJsbackend, QtWayland, QtJsonDB
  • 45. Demos
  • 46. New QML Demos in Qt5 OpenGL Shaders Distance Field High-Quality Anti-Aliasing
  • 47. New QML Demos in Qt5 Qt5自帶QML演示程序 ? Shader effects ? Animated sprites ? Particle system ? Canvas ? Animations ? Localstorage ? XMLHttpRequest Checkout: qtdeclarativeexamplesdemos
  • 48. New QML Demo in Qt5 QtQuick 2.0 QtMultimedia QtGraphicalEffects
  • 49. New QML Demos in Qt5 更多Qt5演示請到Youtube QtStudios頻道觀 看,或者搜索Qt5關鍵字。 http://www.youtube.com/user/qtstudios
  • 50. 全新開發模式 Open Governence Model 所有開發活動都在NPO非盈利組織 qt-project.org下完成 Home: http://qt-project.org Code review/CI : http://codereview.qt-project.org Bug tracking : http://bugreports.qt-project.org Mail list: http://lists.qt-project.org Wiki: http://wiki.qt-project.org Forum : http://qt-project.org/forums Doc : http://qt-project.org/doc
  • 52. 全新開發模式 Open Governence Model Contributors ? 任何人都可成為qt-project的貢獻者,只要: ? 在bugreports.qt-project.org註冊一個帳號來代表自己 ? 訂閱 http://lists.qt-project.org 的郵件列表來參與討論 ? 在bugreports.qt-project.org上提交缺陷報告/功能建議 ? 在codereview.qt-project.org 提交修復缺陷/新功能的代碼 ? 在codereview.qt-project.org上審查別人的代碼 ? 編寫文檔/參與討論 ? 在論壇/郵件列表/IRC上回答熱情的菜鳥的提問 ? 參與各類社區的活動來幫助推廣Qt
  • 53. 全新開發模式 Open Governence Model Approvers ? 有權在他/她了解的範圍內檢查/批准其他人貢獻的代碼 ? 當提交代碼時,Approvers不享有特權,他/她們的代碼同樣 需要別人的檢查和許可,除了極少數例外情況 ? 當拒絕別人的代碼時,Approver有義務給出詳細和建設性的意見 ? Approver應該積極參與各類社區討論 ? 活躍的Contributors通過提名可以成為Approvers ? 幹得不好會被收回權限 ?
  • 54. 全新開發模式 Open Governence Model Maintainers ? Qt各個功能/模塊的技術領導者 ? 對該負責領域的代碼質量負責 ? 負責參與討論和制定該部分的發展方向 ? 是該功能/模塊的默認代碼審查者 當前Qt項目各個模塊的Maintainers http://qt-project.org/wiki/maintainers
  • 55. 全新開發模式 Open Governance Model Chief Maintainer ? Qt最高技術決策者 ? 維護Qt Open Governance Model正常運作 ? 對Qt的發展做計劃
  • 56. Qt Brisbane ? 50+ 軟件工程師 ? 曾經負責開發Qtopia和後續的QtMobility項目 ? QML/QtQuick的老家 ? 現在負責的項目有 ? Qt3D ? QtLocation ? QtDeclarative ? QtMultimedia ? QtSensors ? QtSystems ? Qt QA team ? CI /Release/JIRA ? Approvers/Maintainers權限將保留 ? We are looking for new career opportunities!
  • 57. Qt的未來 ? qt-project.org 開放的開發模型,活躍的開源社區 ? 開放靈活的授權: GPL/LGPL 或者商業授權 ? 龐大的基於Qt的項目數量: ? KDE, Maya, Skype, VLC, VirtualBox, Mathmatica, Dreamworks, Blackberry10, Adobe Photoshop Elements, Opera (Linux), Googe Earth ? 投資Qt技術的眾多公司