全新的Qt5Qt5帶來的全新功能,模塊和開發模型,將使Qt擁有更美好的未來              殷允嶠 Charles Yin         developer @ QML Core Team           yinyunqiao@...
自我介紹/About me• 殷允嶠 (Charles Yin)• 現居住在澳大利亞昆士蘭州的布里斯班• 2009年加入Qt Brisbane R&D lab• 曾經參與的項目   1. 短暫維護QtSql模塊   2. Qt Mobility...
Qt5新開發模型:模塊化git代碼倉庫                                              git://gitorious.org/qt/qlalr.git                         ...
Qt5基本模塊 / Qt5 Essentials Modules                                   QtWebkit                 QtMultiMediaQtTest   QtSql    ...
QtCore: 全新的信號-槽(Signal-Slot)語法先來溫習一下傳統的信號/槽語法:connect(sender, SIGNAL(valueChanged(QString,QString)),        receiver, SLOT...
QtCore: 全新的信號-槽(Signal-Slot)語法connect(sender, SIGNAL(valueChanged(QString,QString)),        receiver, SLOT(updateValue(QSt...
QtCore: 全新的信號-槽(Signal-Slot)語法connect(sender, SIGNAL(valueChanged(QString,QString)),        receiver, SLOT(updateValue(QSt...
QtCore: 全新的信號-槽(Signal-Slot)語法  connect(sender, &Sender::valueChanged,          receiver, &Receiver::updateValue ); • 更符合現...
QtCore: 全新的信號-槽(Signal-Slot)語法 connect(sender, &Sender::valueChanged,         receiver, &Receiver::updateValue );• 編譯期檢查: ...
QtCore: 全新的信號-槽(Signal-Slot)語法connect(sender, &Sender::valueChanged,        receiver, &Receiver::updateValue );• 參數類型自動轉換 ...
QtCore: 全新的信號-槽(Signal-Slot)語法connect(sender, &Sender::valueChanged,        receiver, &Receiver::updateValue );• 任何函數都可成為槽...
QtCore: 全新的信號-槽(Signal-Slot)語法 connect(sender, &Sender::valueChanged,         receiver, &Receiver::updateValue );• 使用C++11...
QtCore: C++11•   使用C++11 lambda匿名函數來編寫槽函數•   更好的Unicode字符串常量 QStringLiteral•   Q_DECL_CONSTEXPR for constexpr•   Q_STATIC_...
QtCore: JSON•   QJsonArray•   QJsonDocument•   QJsonObject•   QJsonParseError•   QJsonValue•   QJsonObject:iterator       ...
QtGui       QtQuick2                      QtWebkit               QtQuick1                QWidget           Scene graph (in...
QtGui: QPA (Qt平台抽象層)讓Qt可以無處不在的秘密武器!       LightHouse項目
QtGui: QPA (Qt平台抽象層)唯一的限制是你的想像力!           Qt/Cacahttp://blog.forwardbias.in/2011/07/q     tcaca-lighthouse-plugin.html
QtGui: QPA (Qt平台抽象層)使得迅速移植到新的系統平台成為可能!“Digia plans to quickly enable Qt onAndroid, iOS and Windows 8 platforms”       http...
QtGui: QPA (Qt平台抽象層)qtbasesrcpluginsplatformsCocoa                          Minimal/minimalGLDirectfb                     ...
QtGui: QPA (Qt平台抽象層)     通過QPA可以控制的GUI功能:•   Event dispatcher         •   Clipboard•   Platform window          •   Drag• ...
QtGui: QPA (Qt平台抽象層)編寫自己的QPA plugin? #include <qpa/qplatformintegration.h> class QMyQPAIntegration : public QPlatformInteg...
QtGui: OpenGLOpenGL現在是QtGUI的一部分,不再通過單獨的OpenGL模塊提供•   QOpenGLContext•   QOpenGLFramebufferObject•   QOpenGLShaderProgram•  ...
QtQml & QtQuick                     QtQml     QtDeclarative                     QtQuick
QtQml & QtQuick in Qt4.x       QtDeclarative (QML/QtQuick)                      QGraphicsView  QtScript                   ...
QtQml & QtQuick in Qt5                   QtQuick   QtQml                 Scene graph                 QWindowSurface  V8   ...
QtQml• QML語言核心模塊• 不再依賴QtQui, 僅依賴QtCore和QtNetwork• 命令行/服務器端QML開發?
QtQml: Javascript engine  • JavascriptCore (JSC) => V8     • QtV8Private (qtjsbackend.git)     • 更快,更好的GC,優秀的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                                        ...
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   • QQuickPainted...
Scene Graph
Scene Graph                        QQuickItem::updatePaintNode(…)(Rendering thread) Scene graph rendering nodes           ...
Scene GraphNode types:•   Root node•   Basic node•   Geometry node•   Transform node•   Clip node•   Opacity node
Scene Graph    public APIs:    •   QSGNode and subclasses    •   QSGNodeVisitor    •   QSGGeometry    •   QSGMaterial    •...
QtQuick 2.0Canvas item import QtQuick 2.0 Canvas {   id:canvas   width:200   height:200   contextType:”2d”   onPaint : {  ...
QtQuick 2.0  Canvas item• Render targets: Canvas.Image, Canvas.FramebufferObject• Render strategies: Canvas.Immediate, Can...
QtQuick 2.0 Animations• 完全重寫,不再依賴QtCore animation framework• 優化內存佔用和執行性能• 新的動畫元素  • AnimationController  • SpriteSequence ...
QtQuick 2.0  Text• Text Rendering in the QML Scene Graph  http://labs.qt.nokia.com/2011/07/15/text-rendering-in-the-qml-  ...
QtQuick 2.0粒子動畫系統 Particle System                        ParticleSystem                       container/timer     Particle...
QtQuickTest: unit test in QMLWrite Quickly => Run Quickly => Test Quicklyimport QtQuick 2.0import QtTest 1.0TestCase {  na...
QtQuickTest: unit test in QML • TestCase • SignalSpy • Data driven test • QTest compatible APIs • more in qtdeclarativetes...
Qt5擴展模塊 / Qt5 Add-ons Modules30+ 擴展模塊:http://qt-project.org/wiki/Qt-Add-ons-Modules源自 Qt Mobility:QtContacts, QtOrganizer,...
Demos
New QML Demos in Qt5                   OpenGL Shaders                   Distance Field                   High-Quality Anti...
New QML Demos in Qt5                  Qt5自帶QML演示程序                  •    Shader effects                  •    Animated spr...
New QML Demo in Qt5                      QtQuick 2.0                      QtMultimedia                      QtGraphicalEff...
New QML Demos in Qt5 更多Qt5演示請到Youtube QtStudios頻道觀 看,或者搜索Qt5關鍵字。 http://www.youtube.com/user/qtstudios
全新開發模式 Open GovernenceModel 所有開發活動都在NPO非盈利組織 qt-project.org下完成 Home: http://qt-project.org Code review/CI : http://coderev...
全新開發模式 Open GovernenceModel
全新開發模式 Open GovernenceModel                Contributors•   任何人都可成為qt-project的貢獻者,只要:•   在bugreports.qt-project.org註冊一個帳號來代...
全新開發模式 Open GovernenceModel           Approvers• 有權在他/她了解的範圍內檢查/批准其他人貢獻的代碼• 當提交代碼時,Approvers不享有特權,他/她們的代碼同樣  需要別人的檢查和許可,除了...
全新開發模式 Open GovernenceModel                Maintainers   •   Qt各個功能/模塊的技術領導者   •   對該負責領域的代碼質量負責   •   負責參與討論和制定該部分的發展方向  ...
全新開發模式 Open GovernanceModel       Chief Maintainer   • Qt最高技術決策者   • 維護Qt Open Governance Model正常運作   • 對Qt的發展做計劃
Qt Brisbane• 50+ 軟件工程師• 曾經負責開發Qtopia和後續的QtMobility項目• QML/QtQuick的老家• 現在負責的項目有   • Qt3D   • QtLocation   • QtDeclarative  ...
Qt的未來• qt-project.org 開放的開發模型,活躍的開源社區• 開放靈活的授權: GPL/LGPL 或者商業授權• 龐大的基於Qt的項目數量:   • KDE, Maya, Skype, VLC, VirtualBox, Math...
問題?
Upcoming SlideShare
Loading in...5
×

全新的Qt5

5,794

Published on

在台北COSCUP 2012上关于Qt5的演讲

0 Comments
12 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,794
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
83
Comments
0
Likes
12
Embeds 0
No embeds

No notes for slide

全新的Qt5

  1. 1. 全新的Qt5Qt5帶來的全新功能,模塊和開發模型,將使Qt擁有更美好的未來 殷允嶠 Charles Yin developer @ QML Core Team yinyunqiao@gmail.com
  2. 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. 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. 4. Qt5基本模塊 / Qt5 Essentials Modules QtWebkit QtMultiMediaQtTest QtSql QtQml QtQuick QtNetwork QtGui QtCore
  5. 5. QtCore: 全新的信號-槽(Signal-Slot)語法先來溫習一下傳統的信號/槽語法:connect(sender, SIGNAL(valueChanged(QString,QString)), receiver, SLOT(updateValue(QString)) );
  6. 6. QtCore: 全新的信號-槽(Signal-Slot)語法connect(sender, SIGNAL(valueChanged(QString,QString)), receiver, SLOT(updateValue(QString)) );問題:• 缺少編譯期語法檢查: 宏 + 字符串• 對C++類型系統不友好: typedef, namespace, etc.• 潛在的性能損失: 運行時解析字符串
  7. 7. QtCore: 全新的信號-槽(Signal-Slot)語法connect(sender, SIGNAL(valueChanged(QString,QString)), receiver, SLOT(updateValue(QString)) );connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue );
  8. 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 themajor reason we didnt have excellent C++development environments a decade ago. -Bjarne Stroustrup
  9. 9. QtCore: 全新的信號-槽(Signal-Slot)語法 connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue );• 編譯期檢查: C++類成員函數指針, 錯誤的信號/槽鏈接將產生 編譯期錯誤而不是運行時警告 • 拼寫錯誤 • 類型不匹配 • 代碼重構 • 將可以更多使用 static_assert: 比如當缺少Q_OBJECT時
  10. 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. 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. 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. 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. 14. QtCore: JSON• QJsonArray• QJsonDocument• QJsonObject• QJsonParseError• QJsonValue• QJsonObject:iterator 擴展模塊QJsonDB : 構建在JSON庫之上的高性能Key-Value數據庫
  15. 15. QtGui QtQuick2 QtWebkit QtQuick1 QWidget Scene graph (in qtdeclarative) QPainter QBacking StoreQSurface QOpenGL QFont QImage … QWindow QScreen QOpenGLContext QAccessible QInputMethod QPA (Qt platform abstraction) Win Mac Wayland X11 Symbian Android …
  16. 16. QtGui: QPA (Qt平台抽象層)讓Qt可以無處不在的秘密武器! LightHouse項目
  17. 17. QtGui: QPA (Qt平台抽象層)唯一的限制是你的想像力! Qt/Cacahttp://blog.forwardbias.in/2011/07/q tcaca-lighthouse-plugin.html
  18. 18. QtGui: QPA (Qt平台抽象層)使得迅速移植到新的系統平台成為可能!“Digia plans to quickly enable Qt onAndroid, iOS and Windows 8 platforms” http://www.digia.com/Qt/About-us/News/Digia-to-Acquire-Qt-from-Nokia/
  19. 19. QtGui: QPA (Qt平台抽象層)qtbasesrcpluginsplatformsCocoa Minimal/minimalGLDirectfb Qnx WindowsEglfs XcbKms OpenwfdLinuxfb
  20. 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. 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. 22. QtGui: OpenGLOpenGL現在是QtGUI的一部分,不再通過單獨的OpenGL模塊提供• QOpenGLContext• QOpenGLFramebufferObject• QOpenGLShaderProgram• QOpenGLFunctions• QOpenGLPaintDevice• …原有的OpenGL類通過單獨的QtOpenGL擴展模塊提供
  23. 23. QtQml & QtQuick QtQml QtDeclarative QtQuick
  24. 24. QtQml & QtQuick in Qt4.x QtDeclarative (QML/QtQuick) QGraphicsView QtScript QPainter Raster Engine GL Engine JSC QtGui
  25. 25. QtQml & QtQuick in Qt5 QtQuick QtQml Scene graph QWindowSurface V8 V4 (OpenGL (ES) 2.0) QtNetwork QtGui QtCore QPA
  26. 26. QtQml• QML語言核心模塊• 不再依賴QtQui, 僅依賴QtCore和QtNetwork• 命令行/服務器端QML開發?
  27. 27. QtQml: Javascript engine • JavascriptCore (JSC) => V8 • QtV8Private (qtjsbackend.git) • 更快,更好的GC,優秀的API設計 • 不再通過QtScript中間層使用Javascript API
  28. 28. QtQml: V4, QML內部的Binding優化 • 一個輕量級的Javascript引擎 • 僅用於QML property binding優化目的 • 比V8還快得多,也小得多
  29. 29. QtQml: QML加載和編譯優化 • 加載和編譯均可異步完成 • Qt.createComponent() with Component.Asynchronous • Loader {asynchronous:true}
  30. 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. 31. QtQuick 2.0 How was QtQuick 2.0 developed? s/QDeclarative/QQuick/g
  32. 32. QtQuick 2.0• 基於OpenGL scene graph完全重寫全部類• public C++ APIs • QQuickView • QQuickWindow • QQuickItem • QQuickPaintedItem
  33. 33. Scene Graph
  34. 34. Scene Graph QQuickItem::updatePaintNode(…)(Rendering thread) Scene graph rendering nodes (Main thread) QML Items
  35. 35. Scene GraphNode types:• Root node• Basic node• Geometry node• Transform node• Clip node• Opacity node
  36. 36. Scene Graph public APIs: • QSGNode and subclasses • QSGNodeVisitor • QSGGeometry • QSGMaterial • QSGMaterialShader • QSGTexture
  37. 37. QtQuick 2.0Canvas 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. 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. 39. QtQuick 2.0 Animations• 完全重寫,不再依賴QtCore animation framework• 優化內存佔用和執行性能• 新的動畫元素 • AnimationController • SpriteSequence • Sprite • AnimatedSprite
  40. 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. 41. QtQuick 2.0粒子動畫系統 Particle System ParticleSystem container/timer ParticlePainter Emmiter render particles create particles Affector alter particles
  42. 42. QtQuickTest: unit test in QMLWrite Quickly => Run Quickly => Test Quicklyimport QtQuick 2.0import QtTest 1.0TestCase { name: "BasicTests" function test_pass() { compare(2 + 2, 4, "2 + 2") }}
  43. 43. QtQuickTest: unit test in QML • TestCase • SignalSpy • Data driven test • QTest compatible APIs • more in qtdeclarativetestsautoqmltest
  44. 44. Qt5擴展模塊 / Qt5 Add-ons Modules30+ 擴展模塊:http://qt-project.org/wiki/Qt-Add-ons-Modules源自 Qt Mobility:QtContacts, QtOrganizer, QtVersit, QtLocation, QtBluetooth, QtSensors,QtServiceFramework, QtSystemInfo, QtPublishAndSubscribe, QtFeedback源自 Qt4.x: QtConcurrent, QtDBus, QtImageFormats, QtOpenGL,QtPrintSupport,QtQuick1, QtScript, QtScriptTools, QtSVG, QtTools,QtWidgets, QtXML, QtXMLPatterns, QtWebkitWidgets新增: Qt3D, QtGraphicalEffects, QtJsbackend, QtWayland,QtJsonDB
  45. 45. Demos
  46. 46. New QML Demos in Qt5 OpenGL Shaders Distance Field High-Quality Anti-Aliasing
  47. 47. New QML Demos in Qt5 Qt5自帶QML演示程序 • Shader effects • Animated sprites • Particle system • Canvas • Animations • Localstorage • XMLHttpRequest Checkout: qtdeclarativeexamplesdemos
  48. 48. New QML Demo in Qt5 QtQuick 2.0 QtMultimedia QtGraphicalEffects
  49. 49. New QML Demos in Qt5 更多Qt5演示請到Youtube QtStudios頻道觀 看,或者搜索Qt5關鍵字。 http://www.youtube.com/user/qtstudios
  50. 50. 全新開發模式 Open GovernenceModel 所有開發活動都在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
  51. 51. 全新開發模式 Open GovernenceModel
  52. 52. 全新開發模式 Open GovernenceModel 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. 53. 全新開發模式 Open GovernenceModel Approvers• 有權在他/她了解的範圍內檢查/批准其他人貢獻的代碼• 當提交代碼時,Approvers不享有特權,他/她們的代碼同樣 需要別人的檢查和許可,除了極少數例外情況• 當拒絕別人的代碼時,Approver有義務給出詳細和建設性的意見• Approver應該積極參與各類社區討論• 活躍的Contributors通過提名可以成為Approvers• 幹得不好會被收回權限 
  54. 54. 全新開發模式 Open GovernenceModel Maintainers • Qt各個功能/模塊的技術領導者 • 對該負責領域的代碼質量負責 • 負責參與討論和制定該部分的發展方向 • 是該功能/模塊的默認代碼審查者 當前Qt項目各個模塊的Maintainers http://qt-project.org/wiki/maintainers
  55. 55. 全新開發模式 Open GovernanceModel Chief Maintainer • Qt最高技術決策者 • 維護Qt Open Governance Model正常運作 • 對Qt的發展做計劃
  56. 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. 57. Qt的未來• qt-project.org 開放的開發模型,活躍的開源社區• 開放靈活的授權: GPL/LGPL 或者商業授權• 龐大的基於Qt的項目數量: • KDE, Maya, Skype, VLC, VirtualBox, Mathmatica, Dreamworks, Blackberry10, Adobe Photoshop Elements, Opera (Linux), Googe Earth• 投資Qt技術的眾多公司
  58. 58. 問題?
  1. ¿Le ha llamado la atención una diapositiva en particular?

    Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

×