SlideShare une entreprise Scribd logo
1  sur  30
Télécharger pour lire hors ligne
Qt Everywhere: a C++
   abstraction platform




Gianni Valdambrini (aleister@develer.com)
C++ and portability issues
   Is C++ portable? Yes, theoretically...
   Standard library is too tiny:
       No filesystem access
       No network
       No multiprocessing/multithreading
       No serious unicode support
       ... and it's not going to change in C++0x!




                                                     2
C++ and portability issues
   Real-world C++ programmers have to use libraries for
    everything
       Some libraries are good, some are bad
       Some are portable, some are not
       Some become unmaintained after a while
       ... big mess!




                                                           3
C++ and portability issues
   Windows programmers use Win32 API
        But Microsoft only improves .NET framework!
        Naked Win32 API is a pain to use!
   Linux programmers use POSIX
        POSIX is mostly C-oriented
        It's totally useless for Windows
   Mac C++ programmers are doomed
        Either POSIX or Carbon...
        Cocoa is for Objective-C only!



                                                       4
Qt to the rescue!
   Qt is not only a GUI toolkit: it's also a complete
    portability layer!
       Even for command line applications
   Lots of carefully designed and very mature classes for
    everyday C++ programming
       Prefer quick everyday usability over “abstract
        perfection”
       Fast to learn, fast to use, compact code




                                                             5
Qt Portability Layer
   QtCore
       Data structures, rich types, system information,
        reactor (event loop), multi-threading
   QtNetwork
       Sockets, IP, TCP, UDP, HTTP, FTP, SSL
   QtXml
       Full DOM implementation
       SAX2 parser
   QtWebKit
            Web browser engine, used by Safari/Chrome

                                                           6
QtCore: quick overview
   QtCore is very “wide” but not “deep”
        Many simple classes
        But lots of them!

   Exploring all it would require a full training on its own!
        We will just see some random examples, that will
         show the typical design of QtCore classes
        Easy to use, and very powerful




                                                                 7
QtCore: Implicit sharing
   Many Qt classes use “implicit sharing”
   Each instance is actually a pointer to shared data, with
    a reference counter
   Net result: fast pass-by-value, easier code, less
    performance bugs.
   Fully multithreaded safe
       No mutex/locks, use CPU-specific atomic
        increments/decrements.




                                                               8
QtCore: Implicit sharing
   Returning by value offer more readable API:
       QList<QObject> c = obj->children();
       Chainability: obj->children().count();
       Can also nest containers with no overhead
   With STL containers, it would have been:
       list<QObject> c; obj->children(c);
       Using an argument as return value is bad for
        readability!




                                                       9
Text processing
   Qt offers many good primitives for text processing.
   QFile: line-by-line processing
   QRegExp: Perl regular expressions (many methods
    accept it, even findChildren()!)
   QString: many powerful methods (inspired by Perl)




                                                          10
QtCore: strings (1/3)
   QString: unicode strings representation

   Implicit sharing policy: pass by value!

   Well-suited for text, don't use for binary data
           QByteArray is better for 8-bit binary data

   Contains loads of functionality for any kind of text
    processing




                                                           11
QtCore: strings (2/3)
   Basic: constructor, resize(), [] / .at(), .size(), .resize(),
    .fill()
   Modification: .append(), .prepend(), .insert(), .replace()
    (RX), .remove() (RX)
   Whitespaces: .trimmed(), simplified()
   Grouping: .split() (RX), .join()
   Searching: .indexOf(), .lastIndexOf(), .find() (RX), .
    {starts|ends}With(), .contains() (RX), .count() (RX)
   Comparison: <, <=, ==, >=, >,
    ::localeAwareCompare()


                                                                    12
QtCore: strings (3/3)
   Conversion to: .toUpper(), .toLower(), toInt(),
    .toDouble(), .toAscii(), .toLatin1(), .toUtf8(),
    .toLocal8Bit(), toUcs4()
   Conversion from: like above, ::number(n,base)
   Formatting: .sprintf() (bad), .arg() (good)
            Use %number formatting instead of %type (like
              printf)
            Fully type-safe
            More translator-friendly (can safely-reorder)
   ... and much more!


                                                             13
QtCore: date/time support
                  (1/3)
   QDate: one instance is one specific calendar day
       Formatting: .{to|from}String() (ISO or locale)
       Weeks: .weekNumber(), .dayOfWeek()
       Jumping: .addDays/Months/Years()
       Texts: ::{long|short}{Day|Month}Name()
       Validation: ::isLeapYear(), ::isValid()
       Ordering: <, <=, ==, >=, >, .daysTo()
       Factory: ::currentDate()




                                                         14
QtCore: date/time support
                  (2/3)
   QTime: one instance is one specific time (instant)
       Formatting: .{to|from}String() (ISO or locale)
       Jumping: .addSecs(), .addMSecs()
       Validation: ::isValid()
       Measuring: .start(), .restart(), .elapsed()
       Ordering: <, <=, >=, >, .secsTo(), .msecsTo()
       Factory: ::currentTime()




                                                         15
QtCore: date/time support
                  (3/3)
   QDateTime: an instance is one specific calendar time at
    a specific time (instant)
       Combination of the previous two, merging all the
        functionalities!
       Time formats: Localtime/UTC




                                                           16
STL containers
   STL containers are good because:
       They are standard C++
       They are ready-to-use and very efficient
       The generic iterator concept is powerful

   STL containers are bad because:
            They are verbose to use (eg: iterating)
            They are incomplete
                    Hash table anyone?
            They bloat the executable code due to template
               expansion
                                                              17
Qt Containers
   Designed “the Qt way”
       Easy to use, no complex stuff
   Implicitly shared
       You can pass by value without impacting
        performance (more readable code!)
   Minimal inline expansion
       Generate light executables for embedded code




                                                       18
Qt Containers
   QList<>, QLinkedList<>, QVector<>
       QList<> is an array of pointers
            Random access
            Best for most purpose (very fast operations)
       QLinkedList<> is a true linked list of pointers
            O(1) insertion in the middle, no random access
       QVector<> is an array of objects
            Occupy contiguous space in memory
            Slow insertions, but cache friendly



                                                              19
Qt Containers
   QVector<> is an array of objects
                    Occupy contiguous space in memory
                    Slow insertions, but cache friendly

   QList<> is an array of pointers
           Random access
           Best for most purpose (very fast operations)

   QSet<>
           Fast set of objects (no repetition)
           Implemented through hash-table (much faster
              than std::set!) → not ordered                20
Qt Containers
   QHash<>, QMap<>
       Associative arrays (map values to keys)
       QHash<> relies on qHash() and operator==(), QMap
        on operator<()
       Hashtables are O(1) for lookups, maps are O(logn)
       Iteration: hashtables have random order, maps have
        fixed order




                                                            21
Qt / XML parsers
           Stream based                DOM
   QXmlReader               QtDom*
          SAX2                     W3C
   QXmlStreamReader
          Qt specific
QXmlReader
   SAX2 only http://www.saxproject.org
   not validating, namespace support
   SAX2 parsing is callback based
           for each sax-event a different function is called
   the parser has no state
QDom*
   in memory representation of the XML document
   follow the W3C recommendations
   useful to manipulate the XML document
   not validating, namespace support
QtNetwork
   Qt module to make networking programs
           QtGui not required
   high-level classes
           for http/ftp clients
   low-level classes
           direct access to the underling socket
           event driven (= high performance)
   SSL support
QtNetwork
           high level classes          low level classes
   QNetworkAccessManager          QTcpServer
   QFtp                           QTcpSocket
                                   QUdpServer
                                   QUdpSocket
                                   QSsl*
QtNetwork
   QMetworkAccessManager
          event driven → the event loop must be running
          QNetworkRequest
                  full support for setting http headers
          QNetworkReply
                  access to the reply headers
                  signals to track the downloading process
QtNetwork
   QNetworkDiskCache
           simple, disk based, cache
           QAbstractNetworkCache for a custom cache


   QnetworkProxy
           route network connections through a proxy
                   SOCK5, HTTP, HTTP Caching, FTP Caching
           transparent to the networking code
                   application wide / per socket
           anonymous or username/password
Any Questions?




 ?               29
GRAZIE !
                                Develer S.r.l.
                             Via Mugellese 1/A
                         50013 Campi Bisenzio
                                Firenze - Italia




Contatti
Mail: info@develer.com
Phone: +39-055-3984627
Fax: +39 178 6003614
http://www.develer.com

Contenu connexe

Tendances

Stackless Python In Eve
Stackless Python In EveStackless Python In Eve
Stackless Python In Eveguest91855c
 
Reactive Qt - Ivan Čukić (Qt World Summit 2015)
Reactive Qt - Ivan Čukić (Qt World Summit 2015)Reactive Qt - Ivan Čukić (Qt World Summit 2015)
Reactive Qt - Ivan Čukić (Qt World Summit 2015)Ivan Čukić
 
От Java Threads к лямбдам, Андрей Родионов
От Java Threads к лямбдам, Андрей РодионовОт Java Threads к лямбдам, Андрей Родионов
От Java Threads к лямбдам, Андрей РодионовYandex
 
Yet another introduction to Linux RCU
Yet another introduction to Linux RCUYet another introduction to Linux RCU
Yet another introduction to Linux RCUViller Hsiao
 
Clockless design language - ilia greenblat
Clockless design language - ilia greenblatClockless design language - ilia greenblat
Clockless design language - ilia greenblatchiportal
 
Re-engineering Eclipse MDT/OCL for Xtext
Re-engineering Eclipse MDT/OCL for XtextRe-engineering Eclipse MDT/OCL for Xtext
Re-engineering Eclipse MDT/OCL for XtextEdward Willink
 
NIR on the Mesa i965 backend (FOSDEM 2016)
NIR on the Mesa i965 backend (FOSDEM 2016)NIR on the Mesa i965 backend (FOSDEM 2016)
NIR on the Mesa i965 backend (FOSDEM 2016)Igalia
 
Simple asynchronous remote invocations for distributed real-time Java
Simple asynchronous remote invocations for distributed real-time JavaSimple asynchronous remote invocations for distributed real-time Java
Simple asynchronous remote invocations for distributed real-time JavaUniversidad Carlos III de Madrid
 
FreeRTOS Xilinx Vivado: Hello World!
FreeRTOS Xilinx Vivado: Hello World!FreeRTOS Xilinx Vivado: Hello World!
FreeRTOS Xilinx Vivado: Hello World!Vincent Claes
 
Open cl programming using python syntax
Open cl programming using python syntaxOpen cl programming using python syntax
Open cl programming using python syntaxcsandit
 

Tendances (19)

No Heap Remote Objects for Distributed real-time Java
No Heap Remote Objects for Distributed real-time JavaNo Heap Remote Objects for Distributed real-time Java
No Heap Remote Objects for Distributed real-time Java
 
Stackless Python In Eve
Stackless Python In EveStackless Python In Eve
Stackless Python In Eve
 
Reactive Qt - Ivan Čukić (Qt World Summit 2015)
Reactive Qt - Ivan Čukić (Qt World Summit 2015)Reactive Qt - Ivan Čukić (Qt World Summit 2015)
Reactive Qt - Ivan Čukić (Qt World Summit 2015)
 
От Java Threads к лямбдам, Андрей Родионов
От Java Threads к лямбдам, Андрей РодионовОт Java Threads к лямбдам, Андрей Родионов
От Java Threads к лямбдам, Андрей Родионов
 
Yet another introduction to Linux RCU
Yet another introduction to Linux RCUYet another introduction to Linux RCU
Yet another introduction to Linux RCU
 
S emb t13-freertos
S emb t13-freertosS emb t13-freertos
S emb t13-freertos
 
Java 7 & 8
Java 7 & 8Java 7 & 8
Java 7 & 8
 
Clockless design language - ilia greenblat
Clockless design language - ilia greenblatClockless design language - ilia greenblat
Clockless design language - ilia greenblat
 
Enhancing the region model of RTSJ
Enhancing the region model of RTSJEnhancing the region model of RTSJ
Enhancing the region model of RTSJ
 
RCU
RCURCU
RCU
 
Re-engineering Eclipse MDT/OCL for Xtext
Re-engineering Eclipse MDT/OCL for XtextRe-engineering Eclipse MDT/OCL for Xtext
Re-engineering Eclipse MDT/OCL for Xtext
 
NIR on the Mesa i965 backend (FOSDEM 2016)
NIR on the Mesa i965 backend (FOSDEM 2016)NIR on the Mesa i965 backend (FOSDEM 2016)
NIR on the Mesa i965 backend (FOSDEM 2016)
 
Qt for S60
Qt for S60Qt for S60
Qt for S60
 
Simple asynchronous remote invocations for distributed real-time Java
Simple asynchronous remote invocations for distributed real-time JavaSimple asynchronous remote invocations for distributed real-time Java
Simple asynchronous remote invocations for distributed real-time Java
 
FreeRTOS Xilinx Vivado: Hello World!
FreeRTOS Xilinx Vivado: Hello World!FreeRTOS Xilinx Vivado: Hello World!
FreeRTOS Xilinx Vivado: Hello World!
 
Extending ns
Extending nsExtending ns
Extending ns
 
Parallel R
Parallel RParallel R
Parallel R
 
lec9_ref.pdf
lec9_ref.pdflec9_ref.pdf
lec9_ref.pdf
 
Open cl programming using python syntax
Open cl programming using python syntaxOpen cl programming using python syntax
Open cl programming using python syntax
 

En vedette

Embedding Qt
Embedding QtEmbedding Qt
Embedding QtFSCONS
 
(2) cpp abstractions abstraction_and_encapsulation
(2) cpp abstractions abstraction_and_encapsulation(2) cpp abstractions abstraction_and_encapsulation
(2) cpp abstractions abstraction_and_encapsulationNico Ludwig
 
Developing and Benchmarking Qt applications on Hawkboard with Xgxperf
Developing and Benchmarking Qt applications on Hawkboard with XgxperfDeveloping and Benchmarking Qt applications on Hawkboard with Xgxperf
Developing and Benchmarking Qt applications on Hawkboard with XgxperfPrabindh Sundareson
 
Case Study: Porting Qt for Embedded Linux on Embedded Processors
Case Study: Porting Qt for Embedded Linux on Embedded ProcessorsCase Study: Porting Qt for Embedded Linux on Embedded Processors
Case Study: Porting Qt for Embedded Linux on Embedded Processorsaccount inactive
 
Qt on Real Time Operating Systems
Qt on Real Time Operating SystemsQt on Real Time Operating Systems
Qt on Real Time Operating Systemsaccount inactive
 
Qt multi threads
Qt multi threadsQt multi threads
Qt multi threadsYnon Perek
 
Qt Framework Events Signals Threads
Qt Framework Events Signals ThreadsQt Framework Events Signals Threads
Qt Framework Events Signals ThreadsNeera Mital
 
2CPP14 - Abstraction
2CPP14 - Abstraction2CPP14 - Abstraction
2CPP14 - AbstractionMichael Heron
 
Qt Technical Presentation
Qt Technical PresentationQt Technical Presentation
Qt Technical PresentationDaniel Rocha
 
QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? ICS
 
Cutest technology of them all - Forum Nokia Qt Webinar December 2009
Cutest technology of them all - Forum Nokia Qt Webinar December 2009Cutest technology of them all - Forum Nokia Qt Webinar December 2009
Cutest technology of them all - Forum Nokia Qt Webinar December 2009Nokia
 
Qt State Machine Framework
Qt State Machine FrameworkQt State Machine Framework
Qt State Machine Frameworkaccount inactive
 
C++ OOPS Concept
C++ OOPS ConceptC++ OOPS Concept
C++ OOPS ConceptBoopathi K
 
Qt Design Patterns
Qt Design PatternsQt Design Patterns
Qt Design PatternsYnon Perek
 
Optimizing Performance in Qt-Based Applications
Optimizing Performance in Qt-Based ApplicationsOptimizing Performance in Qt-Based Applications
Optimizing Performance in Qt-Based Applicationsaccount inactive
 

En vedette (20)

Embedding Qt
Embedding QtEmbedding Qt
Embedding Qt
 
(2) cpp abstractions abstraction_and_encapsulation
(2) cpp abstractions abstraction_and_encapsulation(2) cpp abstractions abstraction_and_encapsulation
(2) cpp abstractions abstraction_and_encapsulation
 
Cross Platform Qt
Cross Platform QtCross Platform Qt
Cross Platform Qt
 
Developing and Benchmarking Qt applications on Hawkboard with Xgxperf
Developing and Benchmarking Qt applications on Hawkboard with XgxperfDeveloping and Benchmarking Qt applications on Hawkboard with Xgxperf
Developing and Benchmarking Qt applications on Hawkboard with Xgxperf
 
Case Study: Porting Qt for Embedded Linux on Embedded Processors
Case Study: Porting Qt for Embedded Linux on Embedded ProcessorsCase Study: Porting Qt for Embedded Linux on Embedded Processors
Case Study: Porting Qt for Embedded Linux on Embedded Processors
 
Qt5 embedded
Qt5 embeddedQt5 embedded
Qt5 embedded
 
Qt on Real Time Operating Systems
Qt on Real Time Operating SystemsQt on Real Time Operating Systems
Qt on Real Time Operating Systems
 
Qt multi threads
Qt multi threadsQt multi threads
Qt multi threads
 
Qt Framework Events Signals Threads
Qt Framework Events Signals ThreadsQt Framework Events Signals Threads
Qt Framework Events Signals Threads
 
2CPP14 - Abstraction
2CPP14 - Abstraction2CPP14 - Abstraction
2CPP14 - Abstraction
 
Qt Technical Presentation
Qt Technical PresentationQt Technical Presentation
Qt Technical Presentation
 
QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong?
 
Cutest technology of them all - Forum Nokia Qt Webinar December 2009
Cutest technology of them all - Forum Nokia Qt Webinar December 2009Cutest technology of them all - Forum Nokia Qt Webinar December 2009
Cutest technology of them all - Forum Nokia Qt Webinar December 2009
 
Qt State Machine Framework
Qt State Machine FrameworkQt State Machine Framework
Qt State Machine Framework
 
C++ OOPS Concept
C++ OOPS ConceptC++ OOPS Concept
C++ OOPS Concept
 
Qt Design Patterns
Qt Design PatternsQt Design Patterns
Qt Design Patterns
 
Encapsulation C++
Encapsulation C++Encapsulation C++
Encapsulation C++
 
OOPS IN C++
OOPS IN C++OOPS IN C++
OOPS IN C++
 
Qt Licensing Explained
Qt Licensing ExplainedQt Licensing Explained
Qt Licensing Explained
 
Optimizing Performance in Qt-Based Applications
Optimizing Performance in Qt-Based ApplicationsOptimizing Performance in Qt-Based Applications
Optimizing Performance in Qt-Based Applications
 

Similaire à Qt everywhere a c++ abstraction platform

Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustEvan Chan
 
Qt for beginners part 1 overview and key concepts
Qt for beginners part 1   overview and key conceptsQt for beginners part 1   overview and key concepts
Qt for beginners part 1 overview and key conceptsICS
 
Os Reindersfinal
Os ReindersfinalOs Reindersfinal
Os Reindersfinaloscon2007
 
Os Reindersfinal
Os ReindersfinalOs Reindersfinal
Os Reindersfinaloscon2007
 
Clojure ♥ cassandra
Clojure ♥ cassandra Clojure ♥ cassandra
Clojure ♥ cassandra Max Penet
 
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)PROIDEA
 
Qt Internationalization
Qt InternationalizationQt Internationalization
Qt InternationalizationICS
 
Cassandra Java APIs Old and New – A Comparison
Cassandra Java APIs Old and New – A ComparisonCassandra Java APIs Old and New – A Comparison
Cassandra Java APIs Old and New – A Comparisonshsedghi
 
NET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptxNET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptxpetabridge
 
The Ring programming language version 1.3 book - Part 53 of 88
The Ring programming language version 1.3 book - Part 53 of 88The Ring programming language version 1.3 book - Part 53 of 88
The Ring programming language version 1.3 book - Part 53 of 88Mahmoud Samir Fayed
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the wayOleg Podsechin
 
Kubernetes @ Squarespace: Kubernetes in the Datacenter
Kubernetes @ Squarespace: Kubernetes in the DatacenterKubernetes @ Squarespace: Kubernetes in the Datacenter
Kubernetes @ Squarespace: Kubernetes in the DatacenterKevin Lynch
 
Kubernetes @ Squarespace (SRE Portland Meetup October 2017)
Kubernetes @ Squarespace (SRE Portland Meetup October 2017)Kubernetes @ Squarespace (SRE Portland Meetup October 2017)
Kubernetes @ Squarespace (SRE Portland Meetup October 2017)Kevin Lynch
 
Akka-demy (a.k.a. How to build stateful distributed systems) I/II
 Akka-demy (a.k.a. How to build stateful distributed systems) I/II Akka-demy (a.k.a. How to build stateful distributed systems) I/II
Akka-demy (a.k.a. How to build stateful distributed systems) I/IIPeter Csala
 
Real-time Programming in Java
Real-time Programming in JavaReal-time Programming in Java
Real-time Programming in JavaAleš Plšek
 
Netflix at-disney-09-26-2014
Netflix at-disney-09-26-2014Netflix at-disney-09-26-2014
Netflix at-disney-09-26-2014Monal Daxini
 
LibOS as a regression test framework for Linux networking #netdev1.1
LibOS as a regression test framework for Linux networking #netdev1.1LibOS as a regression test framework for Linux networking #netdev1.1
LibOS as a regression test framework for Linux networking #netdev1.1Hajime Tazaki
 
Stackless Python In Eve
Stackless Python In EveStackless Python In Eve
Stackless Python In Evel xf
 

Similaire à Qt everywhere a c++ abstraction platform (20)

Porting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to RustPorting a Streaming Pipeline from Scala to Rust
Porting a Streaming Pipeline from Scala to Rust
 
Qt for beginners part 1 overview and key concepts
Qt for beginners part 1   overview and key conceptsQt for beginners part 1   overview and key concepts
Qt for beginners part 1 overview and key concepts
 
Os Reindersfinal
Os ReindersfinalOs Reindersfinal
Os Reindersfinal
 
Os Reindersfinal
Os ReindersfinalOs Reindersfinal
Os Reindersfinal
 
Clojure ♥ cassandra
Clojure ♥ cassandra Clojure ♥ cassandra
Clojure ♥ cassandra
 
Postgres clusters
Postgres clustersPostgres clusters
Postgres clusters
 
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
4Developers 2018: Ile (nie) wiesz o strukturach w .NET (Łukasz Pyrzyk)
 
Qt Internationalization
Qt InternationalizationQt Internationalization
Qt Internationalization
 
Cassandra Java APIs Old and New – A Comparison
Cassandra Java APIs Old and New – A ComparisonCassandra Java APIs Old and New – A Comparison
Cassandra Java APIs Old and New – A Comparison
 
Qt Application Programming with C++ - Part 2
Qt Application Programming with C++ - Part 2Qt Application Programming with C++ - Part 2
Qt Application Programming with C++ - Part 2
 
NET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptxNET Systems Programming Learned the Hard Way.pptx
NET Systems Programming Learned the Hard Way.pptx
 
The Ring programming language version 1.3 book - Part 53 of 88
The Ring programming language version 1.3 book - Part 53 of 88The Ring programming language version 1.3 book - Part 53 of 88
The Ring programming language version 1.3 book - Part 53 of 88
 
Server side JavaScript: going all the way
Server side JavaScript: going all the wayServer side JavaScript: going all the way
Server side JavaScript: going all the way
 
Kubernetes @ Squarespace: Kubernetes in the Datacenter
Kubernetes @ Squarespace: Kubernetes in the DatacenterKubernetes @ Squarespace: Kubernetes in the Datacenter
Kubernetes @ Squarespace: Kubernetes in the Datacenter
 
Kubernetes @ Squarespace (SRE Portland Meetup October 2017)
Kubernetes @ Squarespace (SRE Portland Meetup October 2017)Kubernetes @ Squarespace (SRE Portland Meetup October 2017)
Kubernetes @ Squarespace (SRE Portland Meetup October 2017)
 
Akka-demy (a.k.a. How to build stateful distributed systems) I/II
 Akka-demy (a.k.a. How to build stateful distributed systems) I/II Akka-demy (a.k.a. How to build stateful distributed systems) I/II
Akka-demy (a.k.a. How to build stateful distributed systems) I/II
 
Real-time Programming in Java
Real-time Programming in JavaReal-time Programming in Java
Real-time Programming in Java
 
Netflix at-disney-09-26-2014
Netflix at-disney-09-26-2014Netflix at-disney-09-26-2014
Netflix at-disney-09-26-2014
 
LibOS as a regression test framework for Linux networking #netdev1.1
LibOS as a regression test framework for Linux networking #netdev1.1LibOS as a regression test framework for Linux networking #netdev1.1
LibOS as a regression test framework for Linux networking #netdev1.1
 
Stackless Python In Eve
Stackless Python In EveStackless Python In Eve
Stackless Python In Eve
 

Plus de Develer S.r.l.

Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxDeveler S.r.l.
 
Cloud computing, in practice ~ develer workshop
Cloud computing, in practice ~ develer workshopCloud computing, in practice ~ develer workshop
Cloud computing, in practice ~ develer workshopDeveler S.r.l.
 
Workshop su Android Kernel Hacking
Workshop su Android Kernel HackingWorkshop su Android Kernel Hacking
Workshop su Android Kernel HackingDeveler S.r.l.
 
BeRTOS Embedded Survey Summary 2011
BeRTOS Embedded Survey Summary 2011BeRTOS Embedded Survey Summary 2011
BeRTOS Embedded Survey Summary 2011Develer S.r.l.
 
Qt roadmap: the future of Qt
Qt roadmap: the future of QtQt roadmap: the future of Qt
Qt roadmap: the future of QtDeveler S.r.l.
 
Qt Quick for dynamic UI development
Qt Quick for dynamic UI developmentQt Quick for dynamic UI development
Qt Quick for dynamic UI developmentDeveler S.r.l.
 
Qt licensing: making the right choice
Qt licensing: making the right choiceQt licensing: making the right choice
Qt licensing: making the right choiceDeveler S.r.l.
 
Qt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmerQt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmerDeveler S.r.l.
 
PyQt: rapid application development
PyQt: rapid application developmentPyQt: rapid application development
PyQt: rapid application developmentDeveler S.r.l.
 
Hybrid development using Qt webkit
Hybrid development using Qt webkitHybrid development using Qt webkit
Hybrid development using Qt webkitDeveler S.r.l.
 
Smashing the bottleneck: Qt application profiling
Smashing the bottleneck: Qt application profilingSmashing the bottleneck: Qt application profiling
Smashing the bottleneck: Qt application profilingDeveler S.r.l.
 
BeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded FreeBeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded FreeDeveler S.r.l.
 
BeRTOS: Free Embedded RTOS
BeRTOS: Free Embedded RTOSBeRTOS: Free Embedded RTOS
BeRTOS: Free Embedded RTOSDeveler S.r.l.
 
Develer - Company Profile
Develer - Company ProfileDeveler - Company Profile
Develer - Company ProfileDeveler S.r.l.
 
Bettersoftware Feedback 2009
Bettersoftware Feedback 2009Bettersoftware Feedback 2009
Bettersoftware Feedback 2009Develer S.r.l.
 
Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer S.r.l.
 

Plus de Develer S.r.l. (19)

Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
 
Sw libero rf
Sw libero rfSw libero rf
Sw libero rf
 
Engagement small
Engagement smallEngagement small
Engagement small
 
Farepipi
FarepipiFarepipi
Farepipi
 
Cloud computing, in practice ~ develer workshop
Cloud computing, in practice ~ develer workshopCloud computing, in practice ~ develer workshop
Cloud computing, in practice ~ develer workshop
 
Workshop su Android Kernel Hacking
Workshop su Android Kernel HackingWorkshop su Android Kernel Hacking
Workshop su Android Kernel Hacking
 
BeRTOS Embedded Survey Summary 2011
BeRTOS Embedded Survey Summary 2011BeRTOS Embedded Survey Summary 2011
BeRTOS Embedded Survey Summary 2011
 
Qt roadmap: the future of Qt
Qt roadmap: the future of QtQt roadmap: the future of Qt
Qt roadmap: the future of Qt
 
Qt Quick for dynamic UI development
Qt Quick for dynamic UI developmentQt Quick for dynamic UI development
Qt Quick for dynamic UI development
 
Qt licensing: making the right choice
Qt licensing: making the right choiceQt licensing: making the right choice
Qt licensing: making the right choice
 
Qt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmerQt Creator: the secret weapon of any c++ programmer
Qt Creator: the secret weapon of any c++ programmer
 
PyQt: rapid application development
PyQt: rapid application developmentPyQt: rapid application development
PyQt: rapid application development
 
Hybrid development using Qt webkit
Hybrid development using Qt webkitHybrid development using Qt webkit
Hybrid development using Qt webkit
 
Smashing the bottleneck: Qt application profiling
Smashing the bottleneck: Qt application profilingSmashing the bottleneck: Qt application profiling
Smashing the bottleneck: Qt application profiling
 
BeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded FreeBeRTOS: Sistema Real Time Embedded Free
BeRTOS: Sistema Real Time Embedded Free
 
BeRTOS: Free Embedded RTOS
BeRTOS: Free Embedded RTOSBeRTOS: Free Embedded RTOS
BeRTOS: Free Embedded RTOS
 
Develer - Company Profile
Develer - Company ProfileDeveler - Company Profile
Develer - Company Profile
 
Bettersoftware Feedback 2009
Bettersoftware Feedback 2009Bettersoftware Feedback 2009
Bettersoftware Feedback 2009
 
Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione Develer - Qt Embedded - Introduzione
Develer - Qt Embedded - Introduzione
 

Dernier

React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkPixlogix Infotech
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesManik S Magar
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 

Dernier (20)

React Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App FrameworkReact Native vs Ionic - The Best Mobile App Framework
React Native vs Ionic - The Best Mobile App Framework
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotesMuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
MuleSoft Online Meetup Group - B2B Crash Course: Release SparkNotes
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 

Qt everywhere a c++ abstraction platform

  • 1. Qt Everywhere: a C++ abstraction platform Gianni Valdambrini (aleister@develer.com)
  • 2. C++ and portability issues  Is C++ portable? Yes, theoretically...  Standard library is too tiny:  No filesystem access  No network  No multiprocessing/multithreading  No serious unicode support  ... and it's not going to change in C++0x! 2
  • 3. C++ and portability issues  Real-world C++ programmers have to use libraries for everything  Some libraries are good, some are bad  Some are portable, some are not  Some become unmaintained after a while  ... big mess! 3
  • 4. C++ and portability issues  Windows programmers use Win32 API  But Microsoft only improves .NET framework!  Naked Win32 API is a pain to use!  Linux programmers use POSIX  POSIX is mostly C-oriented  It's totally useless for Windows  Mac C++ programmers are doomed  Either POSIX or Carbon...  Cocoa is for Objective-C only! 4
  • 5. Qt to the rescue!  Qt is not only a GUI toolkit: it's also a complete portability layer!  Even for command line applications  Lots of carefully designed and very mature classes for everyday C++ programming  Prefer quick everyday usability over “abstract perfection”  Fast to learn, fast to use, compact code 5
  • 6. Qt Portability Layer  QtCore  Data structures, rich types, system information, reactor (event loop), multi-threading  QtNetwork  Sockets, IP, TCP, UDP, HTTP, FTP, SSL  QtXml  Full DOM implementation  SAX2 parser  QtWebKit  Web browser engine, used by Safari/Chrome 6
  • 7. QtCore: quick overview  QtCore is very “wide” but not “deep”  Many simple classes  But lots of them!  Exploring all it would require a full training on its own!  We will just see some random examples, that will show the typical design of QtCore classes  Easy to use, and very powerful 7
  • 8. QtCore: Implicit sharing  Many Qt classes use “implicit sharing”  Each instance is actually a pointer to shared data, with a reference counter  Net result: fast pass-by-value, easier code, less performance bugs.  Fully multithreaded safe  No mutex/locks, use CPU-specific atomic increments/decrements. 8
  • 9. QtCore: Implicit sharing  Returning by value offer more readable API:  QList<QObject> c = obj->children();  Chainability: obj->children().count();  Can also nest containers with no overhead  With STL containers, it would have been:  list<QObject> c; obj->children(c);  Using an argument as return value is bad for readability! 9
  • 10. Text processing  Qt offers many good primitives for text processing.  QFile: line-by-line processing  QRegExp: Perl regular expressions (many methods accept it, even findChildren()!)  QString: many powerful methods (inspired by Perl) 10
  • 11. QtCore: strings (1/3)  QString: unicode strings representation  Implicit sharing policy: pass by value!  Well-suited for text, don't use for binary data  QByteArray is better for 8-bit binary data  Contains loads of functionality for any kind of text processing 11
  • 12. QtCore: strings (2/3)  Basic: constructor, resize(), [] / .at(), .size(), .resize(), .fill()  Modification: .append(), .prepend(), .insert(), .replace() (RX), .remove() (RX)  Whitespaces: .trimmed(), simplified()  Grouping: .split() (RX), .join()  Searching: .indexOf(), .lastIndexOf(), .find() (RX), . {starts|ends}With(), .contains() (RX), .count() (RX)  Comparison: <, <=, ==, >=, >, ::localeAwareCompare() 12
  • 13. QtCore: strings (3/3)  Conversion to: .toUpper(), .toLower(), toInt(), .toDouble(), .toAscii(), .toLatin1(), .toUtf8(), .toLocal8Bit(), toUcs4()  Conversion from: like above, ::number(n,base)  Formatting: .sprintf() (bad), .arg() (good)  Use %number formatting instead of %type (like printf)  Fully type-safe  More translator-friendly (can safely-reorder)  ... and much more! 13
  • 14. QtCore: date/time support (1/3)  QDate: one instance is one specific calendar day  Formatting: .{to|from}String() (ISO or locale)  Weeks: .weekNumber(), .dayOfWeek()  Jumping: .addDays/Months/Years()  Texts: ::{long|short}{Day|Month}Name()  Validation: ::isLeapYear(), ::isValid()  Ordering: <, <=, ==, >=, >, .daysTo()  Factory: ::currentDate() 14
  • 15. QtCore: date/time support (2/3)  QTime: one instance is one specific time (instant)  Formatting: .{to|from}String() (ISO or locale)  Jumping: .addSecs(), .addMSecs()  Validation: ::isValid()  Measuring: .start(), .restart(), .elapsed()  Ordering: <, <=, >=, >, .secsTo(), .msecsTo()  Factory: ::currentTime() 15
  • 16. QtCore: date/time support (3/3)  QDateTime: an instance is one specific calendar time at a specific time (instant)  Combination of the previous two, merging all the functionalities!  Time formats: Localtime/UTC 16
  • 17. STL containers  STL containers are good because:  They are standard C++  They are ready-to-use and very efficient  The generic iterator concept is powerful  STL containers are bad because:  They are verbose to use (eg: iterating)  They are incomplete  Hash table anyone?  They bloat the executable code due to template expansion 17
  • 18. Qt Containers  Designed “the Qt way”  Easy to use, no complex stuff  Implicitly shared  You can pass by value without impacting performance (more readable code!)  Minimal inline expansion  Generate light executables for embedded code 18
  • 19. Qt Containers  QList<>, QLinkedList<>, QVector<>  QList<> is an array of pointers  Random access  Best for most purpose (very fast operations)  QLinkedList<> is a true linked list of pointers  O(1) insertion in the middle, no random access  QVector<> is an array of objects  Occupy contiguous space in memory  Slow insertions, but cache friendly 19
  • 20. Qt Containers  QVector<> is an array of objects  Occupy contiguous space in memory  Slow insertions, but cache friendly  QList<> is an array of pointers  Random access  Best for most purpose (very fast operations)  QSet<>  Fast set of objects (no repetition)  Implemented through hash-table (much faster than std::set!) → not ordered 20
  • 21. Qt Containers  QHash<>, QMap<>  Associative arrays (map values to keys)  QHash<> relies on qHash() and operator==(), QMap on operator<()  Hashtables are O(1) for lookups, maps are O(logn)  Iteration: hashtables have random order, maps have fixed order 21
  • 22. Qt / XML parsers Stream based DOM  QXmlReader  QtDom*  SAX2  W3C  QXmlStreamReader  Qt specific
  • 23. QXmlReader  SAX2 only http://www.saxproject.org  not validating, namespace support  SAX2 parsing is callback based  for each sax-event a different function is called  the parser has no state
  • 24. QDom*  in memory representation of the XML document  follow the W3C recommendations  useful to manipulate the XML document  not validating, namespace support
  • 25. QtNetwork  Qt module to make networking programs  QtGui not required  high-level classes  for http/ftp clients  low-level classes  direct access to the underling socket  event driven (= high performance)  SSL support
  • 26. QtNetwork high level classes low level classes  QNetworkAccessManager  QTcpServer  QFtp  QTcpSocket  QUdpServer  QUdpSocket  QSsl*
  • 27. QtNetwork  QMetworkAccessManager  event driven → the event loop must be running  QNetworkRequest  full support for setting http headers  QNetworkReply  access to the reply headers  signals to track the downloading process
  • 28. QtNetwork  QNetworkDiskCache  simple, disk based, cache  QAbstractNetworkCache for a custom cache  QnetworkProxy  route network connections through a proxy  SOCK5, HTTP, HTTP Caching, FTP Caching  transparent to the networking code  application wide / per socket  anonymous or username/password
  • 30. GRAZIE ! Develer S.r.l. Via Mugellese 1/A 50013 Campi Bisenzio Firenze - Italia Contatti Mail: info@develer.com Phone: +39-055-3984627 Fax: +39 178 6003614 http://www.develer.com