SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Downloaden Sie, um offline zu lesen
Introducción   Primeras pinceladas   Ahora en serio   Avanzado




                                     Introducción a Qt.
                        Programación gráfica en C++ con Qt4


                                     Salvador Alemany Garrido



                                     21 de noviembre de 2009




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 1/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Contenido



      1        Introducción

      2        Primeras pinceladas

      3        Ahora en serio

      4        Avanzado




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 2/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Contenido



      1        Introducción

      2        Primeras pinceladas

      3        Ahora en serio

      4        Avanzado




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 3/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Prerequisitos de la charla y objetivos

      Requisitos
               Imprescidible: conocimientos básicos de C++, o
               bien C y Java.
               Importante:
                       Nociones de depuradores e IDEs
                       Nivel de inglés suficiente para la documentación
                       oficial

      Objetivos
               Conocer los componentes y las posibilidades de Qt
               Saber crear una aplicación, y opciones básicas
               Uso de widges básicos conjuntamente
               Definición de widgets personalizados.

                                                                 Salvador Alemany Garrido– Introducción a Qt.– 4/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               ¿Qué es Qt?




               Qt es un framework de desarrollo de aplicaciones
               multiplataforma.
               Viene acompañado de un conjunto de herramientas
               para facilitar su uso.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 5/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 6/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Qt, los módulos I


               QtCore contiene el núcleo no gráfico de Qt
                QtGui La colección básica de componentes gráficos
      QtNetwork Clases para escribir clientes y servidores
                TCP/IP
      QtOpenGL Para facilitar el uso de openGL
          QtScript Expone las aplicaciones a scripting con un
                   lenguaje ECMAscript
      QtScriptTools un depurador de QtScript
               QtSQL integración de bases de datos
               QtSVG Soporte SVG


                                                                 Salvador Alemany Garrido– Introducción a Qt.– 7/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Qt, los Módulos II


        QtWebKit el popular motor web, con Qt
                QtXml soporte básico de Xml
      QtXmlPatterns un motor de XQuery 1.0 y XPath 2.0 y
                parcialmente Xslt
               Phonon El framework multimedia
      Qt3Support Compatibilidad con Qt3
                Otros QtDessigner, QtUiTools, QtHelp, QtAssistant,
                      QtTest, QtDBus(solo Unix), y a partir de Qt
                      4.6 QtOpenVG y QtMultimedia




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 8/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Herramientas


      Charla
               Editor de textos y/o IDE. Kate y Qt Creator
               qmake, gestión de proyectos
               Qt designer,diseñador de interfaces
               Qt assistant, visor de documentación

      Otras Herramientas
               Qt linguist, traducción
               Cmake, alternativa más flexible y potente a qmake
               Otros IDEs: Netbeans, Eclipse... ejem Visual Studio



                                                                 Salvador Alemany Garrido– Introducción a Qt.– 9/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Contenido



      1        Introducción

      2        Primeras pinceladas

      3        Ahora en serio

      4        Avanzado




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 10/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Tipos I
               QtGlobal: tipos básicos




      Tipos globales
      Tenemos los típicos alias para los tipos básicos:

        Tipo        Descripción
        qintSIZE    Entero con los tamaños: 8, 16, 32, 64
        quintSIZE Entero sin signo de tamaños: 8, 16, 32, 64
        qreal       double, excepto en ARM que es float
        quintptr    Entero sin signo de ancho de palabra
        Más en la documentación(QtGlobal)




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 11/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Tipos II
               Contenedores genéricos


      Qt incluye una colección de contenedores genéricos:
               QList es el contenedor genérico más usado, no es
               una lista enlazada como std::list (el equivalente
               sería QLinkedList) sino que internamente usa un
               indice en array, es la clase padre de QStringList
               clave para gestionar colecciones de QString.
               Otros: QLinkedList, QVector, QStack, QQueue,
               QSet, QMap, QMultiMap, QHash, QMultiHash.
               Lo contenedores de Qt disponen de 2 tipos de
               iteradores: estilo STL, y estilo Java, que aputan
               entre los elementos y no a los elementos.
      Más información en Container Classes

                                                                 Salvador Alemany Garrido– Introducción a Qt.– 12/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Tipos II
               Las clases básicas del sistema de objetos

      QObject
      La base del sistema de objetos de Qt. Todo Widget y la
      mayoría de las otras clases de Qt heredan de él.

      QApplication o QCoreApplication
      La clase QApplication efectúa el control de flujo y las
      opciones principales de la aplicación. Solo una instancia
      por aplicación. Debe crearse antes de cualquier objeto
      relacionado con la GUI.

      QWidget
      La base de todos los objetos de interfaz de usuario. Los
      más comunes son QMainWindow y QDialog y sus
      subclases.
                                                                 Salvador Alemany Garrido– Introducción a Qt.– 13/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado

                  er
               1        Programa
               ¡Hola mundo!, el código



      ejemplo
     #include <QApplication>
     #include <QLabel>

      int main( int argc , char ∗ argv [ ] ) {
          QApplication app( argc , argv ) ; / / 1 Crear una app
              / / y solo una ,
          QLabel label ( "Hello Qt!" ) ; / / 2 Crear un widget

               label . show ( ) ; / / 3 Mostramos e l widget

               return app . exec ( ) ; / / 4 Ejecutamos
      }




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 14/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Compilación


      Procedimiento
      Si vas a trabajar sin soporte de un IDE, como en este
      ejemplo para compilar debes hacer lo siguiente, desde
      la carpeta del proyecto.
          1    qmake -project # Genera proyecto
               # independiente de SO y compilador
          2    qmake # Genera Makefiles
          3    make # Compila
          4    ??? # como se llame tu programa
          5    profit


                                                                 Salvador Alemany Garrido– Introducción a Qt.– 15/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Contenido



      1        Introducción

      2        Primeras pinceladas

      3        Ahora en serio

      4        Avanzado




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 16/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Contenido




      3        Ahora en serio
                 Extensiones a C++
                 Algunas clases de interés
                 Herramientas




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 17/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Extensiones a C++ I
               Porque C++ no es suficiente complejo

      Qt no es exactamente C++
      Qt incluye una serie de funcionalidades que no están
      normalmente en C++. Para ello usa su propio
      preprocesador llamado MOC(Meta-Object Compiler)

      Los Metaobjetos
      Qt usa en gran parte de su API un tipo especial de
      objetos no nativo de C++, los metabjetos, los cuales se
      caracterizan por.
               signals y slots
               Propiedades,
               Arboles de objetos.
               Eventos
               Timers: Véase Timers
                                                                 Salvador Alemany Garrido– Introducción a Qt.– 18/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QObject



      Uso
      Para crear y usar un metaobjeto tenemos que hacer 3
      cosas:
          1    Heredar de QObject.
          2    Incluir Q_OBJECT en la primera línea de la
               declaración.
          3    Usar el Meta-object compiler, gestionado por
               qmake.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 19/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QObject II


      Ejemplo
      class MyDialog : public QDialog
      {
          Q_OBJECT

      public :
          MyDialog (QWidget ∗ parent = 0 ) ; / / Atentos a
          ~MyDialog ( ) ;        / / este argumento opcional
      private :
          QPushButton ∗ button ;
      };




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 20/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Signals y Slots I


      Son un mecanismo de comunicación entre objetos que
      heredan de QObject. Características:
               Son type-safe, la firma de la señal debe encajar con
               la firma del slot
               Los slots son funciones que pueden ser llamados
               normalmente.
               Los slots privados, pueden ser invocados por una
               señal cualquiera independientemente del nivel de
               acceso.
               Las clases que emiten señales no necesitan
               preocuparse de que slot recibe la señal.


                                                                 Salvador Alemany Garrido– Introducción a Qt.– 21/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Signals y slots II
               Declaración de Slots




      Slots
      Simplemente métodos en una clase que herede de
      QObject con la macro Q_OBJECT, declarados después de
      una de las siguientes líneas:
               public slots:
               protected slots:
               private slots:




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 22/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Signals y slots III
               Emisión de señales



      signals
      Se declaran como si fueran funciones, en una sección
      propia, pero no se implementan. El moc genera el código
      necesario.

      uso
        signals : / / Declarar
        exampleSignal ( int emitValue ) ;

        / / ejemplo de emitir
        emit exampleSignal ( 4 ) ;



                                                                 Salvador Alemany Garrido– Introducción a Qt.– 23/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Signals y slots IV: Connect

      La API de la conexión de un signal y un slot es:
        connect (const QObject ∗ sender , const char∗ signal ,
               const QObject ∗ receiver , const char∗ s lo t ,
               Qt : : ConnectionType type = QtAutoConnection )


      Ejemplo

        connect ( button , SIGNAL( clicked ( ) ) , qApp, SLOT( quit ( ) ) ) ;
        / / qApp es para acceder a l a QApplicaction global


      Las conexiones tienen más posibilidades, pueden ser
      automatizadas,canceladas, las señales bloqueadas y más, pero
      escapa al propósito de la charla.



                                                                 Salvador Alemany Garrido– Introducción a Qt.– 24/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Propiedades: Q_PROPERTY


      Qt incluye un sofisticado sistema de propiedades, similar
      al que proporcionan algunos compiladores.
        Q_PROPERTY( type name
                   READ getFunction
                    [WRITE setFunction ]
                    [RESET resetFunction ]
                    [DESIGNABLE bool]
                    [SCRIPTABLE bool]
                    [STORED bool]
                    [USER bool ] )




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 25/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Propiedades II



      Quien es quien:
          1    READ: una función de lectura, obligatoria.
          2    WRITE: una función para modificar el valor de la
               propiedad, opcional.
          3    RESET: función opcional, para que la propiedad
               vuelva al valor por defecto.
          4    NOTIFY: opcional, emite una señal cuando el valor
               de la propiedad cambia.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 26/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Propiedades III



          1    DESIGNABLE: indica si estará disponible en el
               diseñador, por defecto true.
          2    SCRIPTABLE: indica si estará disponible para
               QtScript, por defecto true.
          3    STORED: indica si la propiedad es de un valor por si
               mismo o dependiente de otros y si debe ser salvado
               cuando se guarda el estado del objeto, por defecto
               true.
          4    USER: editable por el usuario.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 27/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Propiedades IV
               Uso y justificación

      Se puede acceder a una propiedad usando
      QObject::setProperty(const char *, QVariant &) y
      QObject::property(const char *) sin saber nada sobre
      la clase excepto el nombre de la propiedad. Es preferible
      usar directamente las funciones READ y WRITE, ya que
      son más rápidas y proporcionan mejores diagnósticos en
      tiempo de compilación. Pero requieren conocer la clase
      en tiempo de compilación, y los genéricos no.
      ejemplo
               QPushButton ∗ button = new QPushButton ;
               QObject ∗ object = button ;
               button−>setDown( true ) ;
               object−>setProperty ( "down" , true ) ;

                                                                 Salvador Alemany Garrido– Introducción a Qt.– 28/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               El árbol de objetos



      Utilidad
      Los QObjects se organizan a si mismos en arboles de
      objetos. Cuando creas un QObject con otro como padre,
      es añadido a la lista de hijos(accesible con children()) y
      será borrado cuando el padre lo sea.

        button = new QPushButton ( "Salir" , this ) ;




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 29/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Eventos
               Que hacer con ellos




      Los eventos en Qt son objetos que derivan de la clase
      QEvent. A efectos prácticos típicamente para manejar
      eventos de forma personalizada reimplementamos
      funciones virtuales.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 30/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Contenido




      3        Ahora en serio
                 Extensiones a C++
                 Algunas clases de interés
                 Herramientas




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 31/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QWidget


      Hereda de QObject y QPaintDevice La base de todos los
      widgets, y componente atómico de la interfaz.
      Un Widget sin un padre es una ventana independiente.
      setWindowTitle() y setWindowIcon() establecen la barra
      de titulo y el icono respectivamente.
      El constructor de todo Widget debe aceptar uno o 2 de
      los argumentos siguientes:
               QWidget *parent = 0: Si es 0 será una ventana
               principal.
               Qt::WindowFlags f = 0: establecer parámetros
               especiales para la ventana.



                                                                 Salvador Alemany Garrido– Introducción a Qt.– 32/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QWidget



               QWidget(e hijos) usa doble-buffer automáticamente
               Es posible crear ventanas con transparencias. (en
               X11: solo con Kwin o Compiz)
               Aparte de los estilos estándar podemos aplicar estilos
               usando CSS.
               Funcionalidades básicas: cursores, eventos, detección de
               pantalla completa, tooltips...




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 33/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Diálogos I
               QDialog e hijos




      QDialog es la base de las ventanas de diálogos.
      Disponemos básicamente de:


        QColorDialog                              QErrorMessage          QFileDialog
        QFontDialog                               QInputDialog           QMessageBox
        QPageSetupDialog                          QPrintDialog           QPrintPreviewDialog
        QProgressDialog                           QWizard




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 34/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Diálogos II
               Descripción detallada




      Un dialogo es una ventana de primer nivel siempre,
      usada para tareas y comunicaciones breves con el
      usuario.
      Posibilidades
               Diálogos modales: se aplica con exec()
               Diálogos no modales: usando el método show()
               Botones por defecto:
               Se cierran con ESC: ejecutando reject() en la salida
               Extensibilidad: véase Extension example




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 35/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Qt MainWindow Framework
               QMainWindow y amigos




      Podemos entender
      que QMainWindow nos
      proporciona un marco de
      trabajo, para construir una
      GUI. QMainWindow tiene
      su propio layout al que se
      puede añadir QToolBars,
      QDockWidgets, un
      QMenu, y una QStatusBar.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 36/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QMainWindow
               El widget central



      El widget central
      puede ser cualquier widged de Qt como QTextEdit o
      QGraphicsView o uno personalizado. Establecemos el
      widget central con setCentralWidget()
      Una ventana principal puede tener una único(SDI) o
      múltiple(MDI) interfaz de documentos. Para hacer una
      aplicación MDI establece una QMDIArea como widget
      principal.

      Podemos almacenar y restaurar el layout con:
               saveState();
               restoreState();

                                                                 Salvador Alemany Garrido– Introducción a Qt.– 37/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QMainWindow
               Menús


      Creación de menús
      Los menús se implementan con QMenu y se mantienen
      organizados en una QMenubar. Cada entrada es una
      QAction. Añadimos menús con addMenu(QMenu), y
      acciones a los menús con con addAcction(QAction)

      Ejemplo
        void MainWindow : : createMenus ( ) {
            fileMenu = menuBar()−>addMenu( t r ( "&File" ) ) ;
            fileMenu−>addAction (newAct ) ;
            fileMenu−>addAction ( openAct ) ;
            fileMenu−>addAction ( saveAct ) ;


                                                                 Salvador Alemany Garrido– Introducción a Qt.– 38/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QMainWindow
               Toolbars: barras de herramientas




      Creación de toolbars
      creamos una instancia de QToolBar y la añadimos con
      addToolbar, los elementos también son QActions.

      Ejemplo
         void MainWindow : : createToolBars ( )
        {
            f i l e T o o l B a r = addToolBar ( t r ( "File" ) ) ;
            fileToolBar −         >addAction (newAct ) ;




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 39/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QString I



               Clase de manejo de texto Unicode. Almacena una
               cadena de QChars, siendo cada QChar de 16 bits
               Usa compartición implícita de memoria, con copia
               en escritura.
               Dispone de funciones para convertir de y a números
               Es muy recomendable manejar las listas de QStrings
               usando QStringList




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 40/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QString II



      Dispone de 4 conversiones a const char *
               toAscii(): Autoexplicativo
               toLatin(): Convierte a una cadena de la codificación
               latin-1(ISO 8859-1
               toUtf8(): Convierte a UTF-8
               toLocal8Bit(): A la codificación local




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 41/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               QString III
      Gracias al sistema de tipos de C++ y al hecho de que
      QString es implícitamente compartida, pueden ser
      tratadas como tipos básicos como int.

      Inicialización
      Bastante típica, diversas alternativas:
          QString str1 ( "Hello" ) ;
          QString str2 = "Hello" ;
          static const QChar data [4] = {0x0055 , 0x006e ,
          0x10e3 , 0x03a3};    QString str3 ( data , 4 ) ;

      También carácter a carácter.

      O en retornos de funciones.
        return str1 ;

                                                                 Salvador Alemany Garrido– Introducción a Qt.– 42/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Otros widgets básicos



      Botones
      QCheckBox, QPushButton, QRadioButton, QToolButton y
      QCommandLinkButton.

      Texto
      QLineEdit, QPlainTextEdit, QTextEdit, QTextBrowser

      Otros contenedores
      QMDIArea, QTabWidget, QStackedWidget




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 43/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Layouts



      Basicamente se usan las siguientes posibilidades:
      QHBoxLayout organiza los widgets en una fila horizontal
      QVBoxLayout alínea los widgets en una columna vertical
      QGridBoxLayout organiza los widgets en una rejilla, un
                widget puede ocupar varias casillas
      QFormLayout Alternativa de alto nive a QGridBoxLayout
               para layouts de 2 columnas.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 44/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Contenido




      3        Ahora en serio
                 Extensiones a C++
                 Algunas clases de interés
                 Herramientas




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 45/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Qt Designer I


      Simplemente
      Escribir código de interfaces tiene mucho de aburrido,
      repetitivo y rutinario. Es posible, en bastantes casos y
      recomendable usar un diseñador de interfaces. Aparte
      de eso las vemos tal cual las hacemos.

      designer
      Para, diseñar y crear interfaces de forma visual y
      cómoda con Qt disponemos de Qt Designer, bien
      standalone, bien integrado en Eclipse o Qt Creator




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 46/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Qt Designer
               En imágenes I



      La interfaz puede ser configurada para funcionar con
      una sola o con varias ventanas.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 47/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Qt Designer
               En imágenes II




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 48/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Qt Designer




      La mejor manera de aprender a usar un diseñador de
      interfaces es usarlo.
      En caso de duda consulta primero la documentación.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 49/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               qmake I



      Qmake es la herramienta de generación de Makefiles
      oficial de Qt4.
      Características:
               Optimizado para Qt4
               Automáticamente genera reglas de compilación
               para moc y uic.
               Genera proyectos para el Visual Studio.




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 50/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               qmake II
               Variables I
      Modificamos valores de una variable con la sintaxis:
      VARIABLE ± = valor SOURCES Ficheros de código
      fuente del proyecto.
      Algunas variables de interés:
               SOURCES: los ficheros de código fuente. SOURCES
               += file.cpp
               HEADERS: cabeceras del proyecto. HEADERS +=
               file.h
               FORMS: Archivos de interfaces(.ui) FORMS +=
               dialog.ui
               TARGET: nombre de la aplicación o librería; por
               defecto el nombre del proyecto
               CONFIG: opciones, merece un vistazo en
               profundidad
                                                                 Salvador Alemany Garrido– Introducción a Qt.– 51/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               qmake III



               RESOURCES: una lista de ficheros de recursos a
               incluir
               TEMPLATE: la plantilla a usar para el proyecto
               disponemos de app, lib, subdirs(reglas para
               subdirectorios), vcapp, vclib.
               DEFINES: para incluir definiciones con el
               preprocesador
               QT: indica que componentes de Qt incluye el
               proyecto, por defecto core y gui




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 52/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               qmake IV
               Los módulos de Qt



                                Opción                       Modulo
                                core                         QtCore
                                gui                          QtGui
                                network                      QtNetwork
                                opengl                       QtOpenGL
                                sql                          QtSql
                                svg                          QtSvg
                                xml                          QtXml
                                xmlpatterns                  QtXmplPatterns
                                webkit                       QtWebKit
                                qt3support                   Qt3Support



                                                                   Salvador Alemany Garrido– Introducción a Qt.– 53/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               qmake V
               CONFIG



      CONFIG es el cajón de sastre de las opciones.


        Opción                                              Descripción
        release                                             Crea el proyecto en modo release
        debug                                               Crea el proyecto en modo debug
        debug_and_release                                   Crea el proyecto en ambos modos
        debug_and_release_target                            ídem y en subdirectorios
        build_all                                           compila todos los modos
        warn_on                                             Habilita todos los warnings posibles
        warn_off                                            Deshabilita bastantes warnings




                                                                    Salvador Alemany Garrido– Introducción a Qt.– 54/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               qmake
               Consejos y recordatorios


      Comandos
         Crear proyecto con: qmake -project
               Generar Makefiles simplemente: qmake

      Trucos
               Usa QMAKE_LFLAGS += -s en modo release para
               generar ejecutables más pequeños
               Puedes dar opciones dependientes de plataforma
               simplemente poniendo el nombre de la plataforma
               seguido de unas llaves y las opciones entre ellas
               Lee la documentación, hay para hacer 40
               transparencias más, aparte de funcionalidades no
               documentadas.
                                                                 Salvador Alemany Garrido– Introducción a Qt.– 55/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Qt Assistant

      La aplicación
      Es un sencillo y potente visor de documentación que
      proporciona múltiples maneras de acceder a la
      información. De forma jerárquica en contenidos,
      búsquedas sobre el índice o todo el contenido y
      marcadores.
      Permite añadir nuestra propia documentación, si esta en
      el formato qch(Qt compressed help).

      ¿Que información contiene?
      Por defecto incluye la documentación de Qt, qmake, Qt
      Assistant, Qt Dessigner, Qt Linguist, y en ocasiones Qt
      Creator.

                                                                 Salvador Alemany Garrido– Introducción a Qt.– 56/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Contenido



      1        Introducción

      2        Primeras pinceladas

      3        Ahora en serio

      4        Avanzado




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 57/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Contenido




      4        Avanzado
                 Programación Modelo-Vista




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 58/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


                Componentes del modelo-vista



               models Proporcionan
                      una interfaz estándar
                      que vistas y delegados
                      usan para acceder a los
                      datos. Los datos en si no están
                      almacenados en el modelo.
                Views las vistas obtienen datos
                      del modelo y los muestran al
                      usuario.
      Delegates Obtienen datos de los usuarios.


                                                                 Salvador Alemany Garrido– Introducción a Qt.– 59/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Las Graphics view

      Las Graphics View proporcionan una superficie para
      gestionar e interactuar con un gran número de
      componentes 2D personalizados.

      Como aproximación al Model-View
      Es un modelo basado en componentes. Varias vistas
      pueden observar una misma escena y una escena puede
      contener items de variados shapes geométricos.
      La escena: Proporcionada por QGraphicsScene
          La vista: Proporcionada por QGraphicsView
           El item: proporcionado por QGraphicsItem, y
                    QGraphicsWidget(No hereda de QWidget)


                                                                 Salvador Alemany Garrido– Introducción a Qt.– 60/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Otros puntos de interes I
               Dentro de QtGui




               Qt Style Sheets:1 hojas de estilo con una sintaxis
               similar a la del CSS web.
               Drag and Drop: arrastrar y soltar
               La página All Overviews and HOWTOs puede ser un
               buen punto de inicio para buscar en caso de buscar
               información sobre temas de interés como la
               internacionalización, intercomunicación de
               procesos, teclados, plugins, integración con el
               escritorio...



          1
              Consultar las páginas con estos nombres
                                                                 Salvador Alemany Garrido– Introducción a Qt.– 61/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Otros puntos de interes II
               General




               QtConcurrent, primitivas orientadas a objetos para
               programación multihilo, así como apis de alto nivel.
               Otros cosas a tener en cuenta al desarrollar
               aplicaciones como manejo de eventos(más
               general), y recursos(qrc)




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 62/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado


               Fuentes
               Recursos útiles si quieres profundizar




               Web de la documentación de Qt
               C++ Gui Programming with Qt4, 2nd Edition
               Jasmin Blanchette y Mark Summerfield
               Edición vieja disponible para descarga.
               An introduction to design patterns in C++ with Qt 4
               Ezust, Alan, Upper Saddle River [etc.]




                                                                 Salvador Alemany Garrido– Introducción a Qt.– 63/64
Introducción   Primeras pinceladas   Ahora en serio   Avanzado




      ¿Preguntas o sugerencias?




                                                                 Salvador Alemany Garrido
                                                                               salalgar@fiv.upv.es



                                                                     Salvador Alemany Garrido– Introducción a Qt.– 64/64

Weitere ähnliche Inhalte

Was ist angesagt?

A Sneak Peek of MLIR in TensorFlow
A Sneak Peek of MLIR in TensorFlowA Sneak Peek of MLIR in TensorFlow
A Sneak Peek of MLIR in TensorFlowKoan-Sin Tan
 
Microprocesseur support de cours
Microprocesseur support de coursMicroprocesseur support de cours
Microprocesseur support de courssarah Benmerzouk
 
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...Nawres Farhat
 
my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;
my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;
my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;dankogai
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!amusementcreators
 
Rapport de projet de fin d"études
Rapport de projet de fin d"étudesRapport de projet de fin d"études
Rapport de projet de fin d"étudesMohamed Boubaya
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zinebZineb ELGARRAI
 

Was ist angesagt? (10)

SMART Home Rapport
SMART Home RapportSMART Home Rapport
SMART Home Rapport
 
A Sneak Peek of MLIR in TensorFlow
A Sneak Peek of MLIR in TensorFlowA Sneak Peek of MLIR in TensorFlow
A Sneak Peek of MLIR in TensorFlow
 
Microprocesseur support de cours
Microprocesseur support de coursMicroprocesseur support de cours
Microprocesseur support de cours
 
Generateur de code java (GenJAVA)
Generateur de code java (GenJAVA)Generateur de code java (GenJAVA)
Generateur de code java (GenJAVA)
 
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
Rapport pfe- Refonte et déploiement d’une solution de messagerie en utilisant...
 
my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;
my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;
my$talk=qr{((?:ir)?reg(?:ular )?exp(?:ressions?)?)}i;
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!
 
Contraintes uml
Contraintes umlContraintes uml
Contraintes uml
 
Rapport de projet de fin d"études
Rapport de projet de fin d"étudesRapport de projet de fin d"études
Rapport de projet de fin d"études
 
Cours partie1 elgarrai zineb
Cours partie1 elgarrai zinebCours partie1 elgarrai zineb
Cours partie1 elgarrai zineb
 

Ähnlich wie Introducción a Qt (20)

Python gui-mvc-pyqt
Python gui-mvc-pyqtPython gui-mvc-pyqt
Python gui-mvc-pyqt
 
Primeros pasos en pyqt
Primeros pasos en pyqtPrimeros pasos en pyqt
Primeros pasos en pyqt
 
Qt jambi
Qt jambiQt jambi
Qt jambi
 
Primeros Pasos en PyQt4
Primeros Pasos en PyQt4Primeros Pasos en PyQt4
Primeros Pasos en PyQt4
 
Introducción a Qt
Introducción a QtIntroducción a Qt
Introducción a Qt
 
Aprenda qt4
Aprenda qt4Aprenda qt4
Aprenda qt4
 
Aprenda qt4
Aprenda qt4Aprenda qt4
Aprenda qt4
 
Programación con QT4
Programación con QT4Programación con QT4
Programación con QT4
 
Introducción a la Arquitectura y Desarrollo en KDE4
Introducción a la Arquitectura y Desarrollo en KDE4Introducción a la Arquitectura y Desarrollo en KDE4
Introducción a la Arquitectura y Desarrollo en KDE4
 
Cppbasico
CppbasicoCppbasico
Cppbasico
 
Cppbasico
CppbasicoCppbasico
Cppbasico
 
Tutorial de c++
Tutorial de c++Tutorial de c++
Tutorial de c++
 
programacion c++ basico
programacion c++  basicoprogramacion c++  basico
programacion c++ basico
 
C++ basico subido JHS
C++ basico subido JHSC++ basico subido JHS
C++ basico subido JHS
 
Tutorial de C
Tutorial de CTutorial de C
Tutorial de C
 
Aprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primeroAprenda C++ como si estuviera en primero
Aprenda C++ como si estuviera en primero
 
Anjuta
AnjutaAnjuta
Anjuta
 
Consulta c++
Consulta c++Consulta c++
Consulta c++
 
S8 - NUGET
S8 - NUGETS8 - NUGET
S8 - NUGET
 
Jag
JagJag
Jag
 

Kürzlich hochgeladen

PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosAlbanyMartinez7
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1ivanapaterninar
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptxHugoGutierrez99
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdfsharitcalderon04
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 

Kürzlich hochgeladen (20)

PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
Documentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos JuridicosDocumentacion Electrónica en Actos Juridicos
Documentacion Electrónica en Actos Juridicos
 
Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1Guía de Registro slideshare paso a paso 1
Guía de Registro slideshare paso a paso 1
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
#Tare10ProgramacionWeb2024aaaaaaaaaaaa.pptx
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdf
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 

Introducción a Qt

  • 1. Introducción Primeras pinceladas Ahora en serio Avanzado Introducción a Qt. Programación gráfica en C++ con Qt4 Salvador Alemany Garrido 21 de noviembre de 2009 Salvador Alemany Garrido– Introducción a Qt.– 1/64
  • 2. Introducción Primeras pinceladas Ahora en serio Avanzado Contenido 1 Introducción 2 Primeras pinceladas 3 Ahora en serio 4 Avanzado Salvador Alemany Garrido– Introducción a Qt.– 2/64
  • 3. Introducción Primeras pinceladas Ahora en serio Avanzado Contenido 1 Introducción 2 Primeras pinceladas 3 Ahora en serio 4 Avanzado Salvador Alemany Garrido– Introducción a Qt.– 3/64
  • 4. Introducción Primeras pinceladas Ahora en serio Avanzado Prerequisitos de la charla y objetivos Requisitos Imprescidible: conocimientos básicos de C++, o bien C y Java. Importante: Nociones de depuradores e IDEs Nivel de inglés suficiente para la documentación oficial Objetivos Conocer los componentes y las posibilidades de Qt Saber crear una aplicación, y opciones básicas Uso de widges básicos conjuntamente Definición de widgets personalizados. Salvador Alemany Garrido– Introducción a Qt.– 4/64
  • 5. Introducción Primeras pinceladas Ahora en serio Avanzado ¿Qué es Qt? Qt es un framework de desarrollo de aplicaciones multiplataforma. Viene acompañado de un conjunto de herramientas para facilitar su uso. Salvador Alemany Garrido– Introducción a Qt.– 5/64
  • 6. Introducción Primeras pinceladas Ahora en serio Avanzado Salvador Alemany Garrido– Introducción a Qt.– 6/64
  • 7. Introducción Primeras pinceladas Ahora en serio Avanzado Qt, los módulos I QtCore contiene el núcleo no gráfico de Qt QtGui La colección básica de componentes gráficos QtNetwork Clases para escribir clientes y servidores TCP/IP QtOpenGL Para facilitar el uso de openGL QtScript Expone las aplicaciones a scripting con un lenguaje ECMAscript QtScriptTools un depurador de QtScript QtSQL integración de bases de datos QtSVG Soporte SVG Salvador Alemany Garrido– Introducción a Qt.– 7/64
  • 8. Introducción Primeras pinceladas Ahora en serio Avanzado Qt, los Módulos II QtWebKit el popular motor web, con Qt QtXml soporte básico de Xml QtXmlPatterns un motor de XQuery 1.0 y XPath 2.0 y parcialmente Xslt Phonon El framework multimedia Qt3Support Compatibilidad con Qt3 Otros QtDessigner, QtUiTools, QtHelp, QtAssistant, QtTest, QtDBus(solo Unix), y a partir de Qt 4.6 QtOpenVG y QtMultimedia Salvador Alemany Garrido– Introducción a Qt.– 8/64
  • 9. Introducción Primeras pinceladas Ahora en serio Avanzado Herramientas Charla Editor de textos y/o IDE. Kate y Qt Creator qmake, gestión de proyectos Qt designer,diseñador de interfaces Qt assistant, visor de documentación Otras Herramientas Qt linguist, traducción Cmake, alternativa más flexible y potente a qmake Otros IDEs: Netbeans, Eclipse... ejem Visual Studio Salvador Alemany Garrido– Introducción a Qt.– 9/64
  • 10. Introducción Primeras pinceladas Ahora en serio Avanzado Contenido 1 Introducción 2 Primeras pinceladas 3 Ahora en serio 4 Avanzado Salvador Alemany Garrido– Introducción a Qt.– 10/64
  • 11. Introducción Primeras pinceladas Ahora en serio Avanzado Tipos I QtGlobal: tipos básicos Tipos globales Tenemos los típicos alias para los tipos básicos: Tipo Descripción qintSIZE Entero con los tamaños: 8, 16, 32, 64 quintSIZE Entero sin signo de tamaños: 8, 16, 32, 64 qreal double, excepto en ARM que es float quintptr Entero sin signo de ancho de palabra Más en la documentación(QtGlobal) Salvador Alemany Garrido– Introducción a Qt.– 11/64
  • 12. Introducción Primeras pinceladas Ahora en serio Avanzado Tipos II Contenedores genéricos Qt incluye una colección de contenedores genéricos: QList es el contenedor genérico más usado, no es una lista enlazada como std::list (el equivalente sería QLinkedList) sino que internamente usa un indice en array, es la clase padre de QStringList clave para gestionar colecciones de QString. Otros: QLinkedList, QVector, QStack, QQueue, QSet, QMap, QMultiMap, QHash, QMultiHash. Lo contenedores de Qt disponen de 2 tipos de iteradores: estilo STL, y estilo Java, que aputan entre los elementos y no a los elementos. Más información en Container Classes Salvador Alemany Garrido– Introducción a Qt.– 12/64
  • 13. Introducción Primeras pinceladas Ahora en serio Avanzado Tipos II Las clases básicas del sistema de objetos QObject La base del sistema de objetos de Qt. Todo Widget y la mayoría de las otras clases de Qt heredan de él. QApplication o QCoreApplication La clase QApplication efectúa el control de flujo y las opciones principales de la aplicación. Solo una instancia por aplicación. Debe crearse antes de cualquier objeto relacionado con la GUI. QWidget La base de todos los objetos de interfaz de usuario. Los más comunes son QMainWindow y QDialog y sus subclases. Salvador Alemany Garrido– Introducción a Qt.– 13/64
  • 14. Introducción Primeras pinceladas Ahora en serio Avanzado er 1 Programa ¡Hola mundo!, el código ejemplo #include <QApplication> #include <QLabel> int main( int argc , char ∗ argv [ ] ) { QApplication app( argc , argv ) ; / / 1 Crear una app / / y solo una , QLabel label ( "Hello Qt!" ) ; / / 2 Crear un widget label . show ( ) ; / / 3 Mostramos e l widget return app . exec ( ) ; / / 4 Ejecutamos } Salvador Alemany Garrido– Introducción a Qt.– 14/64
  • 15. Introducción Primeras pinceladas Ahora en serio Avanzado Compilación Procedimiento Si vas a trabajar sin soporte de un IDE, como en este ejemplo para compilar debes hacer lo siguiente, desde la carpeta del proyecto. 1 qmake -project # Genera proyecto # independiente de SO y compilador 2 qmake # Genera Makefiles 3 make # Compila 4 ??? # como se llame tu programa 5 profit Salvador Alemany Garrido– Introducción a Qt.– 15/64
  • 16. Introducción Primeras pinceladas Ahora en serio Avanzado Contenido 1 Introducción 2 Primeras pinceladas 3 Ahora en serio 4 Avanzado Salvador Alemany Garrido– Introducción a Qt.– 16/64
  • 17. Introducción Primeras pinceladas Ahora en serio Avanzado Contenido 3 Ahora en serio Extensiones a C++ Algunas clases de interés Herramientas Salvador Alemany Garrido– Introducción a Qt.– 17/64
  • 18. Introducción Primeras pinceladas Ahora en serio Avanzado Extensiones a C++ I Porque C++ no es suficiente complejo Qt no es exactamente C++ Qt incluye una serie de funcionalidades que no están normalmente en C++. Para ello usa su propio preprocesador llamado MOC(Meta-Object Compiler) Los Metaobjetos Qt usa en gran parte de su API un tipo especial de objetos no nativo de C++, los metabjetos, los cuales se caracterizan por. signals y slots Propiedades, Arboles de objetos. Eventos Timers: Véase Timers Salvador Alemany Garrido– Introducción a Qt.– 18/64
  • 19. Introducción Primeras pinceladas Ahora en serio Avanzado QObject Uso Para crear y usar un metaobjeto tenemos que hacer 3 cosas: 1 Heredar de QObject. 2 Incluir Q_OBJECT en la primera línea de la declaración. 3 Usar el Meta-object compiler, gestionado por qmake. Salvador Alemany Garrido– Introducción a Qt.– 19/64
  • 20. Introducción Primeras pinceladas Ahora en serio Avanzado QObject II Ejemplo class MyDialog : public QDialog { Q_OBJECT public : MyDialog (QWidget ∗ parent = 0 ) ; / / Atentos a ~MyDialog ( ) ; / / este argumento opcional private : QPushButton ∗ button ; }; Salvador Alemany Garrido– Introducción a Qt.– 20/64
  • 21. Introducción Primeras pinceladas Ahora en serio Avanzado Signals y Slots I Son un mecanismo de comunicación entre objetos que heredan de QObject. Características: Son type-safe, la firma de la señal debe encajar con la firma del slot Los slots son funciones que pueden ser llamados normalmente. Los slots privados, pueden ser invocados por una señal cualquiera independientemente del nivel de acceso. Las clases que emiten señales no necesitan preocuparse de que slot recibe la señal. Salvador Alemany Garrido– Introducción a Qt.– 21/64
  • 22. Introducción Primeras pinceladas Ahora en serio Avanzado Signals y slots II Declaración de Slots Slots Simplemente métodos en una clase que herede de QObject con la macro Q_OBJECT, declarados después de una de las siguientes líneas: public slots: protected slots: private slots: Salvador Alemany Garrido– Introducción a Qt.– 22/64
  • 23. Introducción Primeras pinceladas Ahora en serio Avanzado Signals y slots III Emisión de señales signals Se declaran como si fueran funciones, en una sección propia, pero no se implementan. El moc genera el código necesario. uso signals : / / Declarar exampleSignal ( int emitValue ) ; / / ejemplo de emitir emit exampleSignal ( 4 ) ; Salvador Alemany Garrido– Introducción a Qt.– 23/64
  • 24. Introducción Primeras pinceladas Ahora en serio Avanzado Signals y slots IV: Connect La API de la conexión de un signal y un slot es: connect (const QObject ∗ sender , const char∗ signal , const QObject ∗ receiver , const char∗ s lo t , Qt : : ConnectionType type = QtAutoConnection ) Ejemplo connect ( button , SIGNAL( clicked ( ) ) , qApp, SLOT( quit ( ) ) ) ; / / qApp es para acceder a l a QApplicaction global Las conexiones tienen más posibilidades, pueden ser automatizadas,canceladas, las señales bloqueadas y más, pero escapa al propósito de la charla. Salvador Alemany Garrido– Introducción a Qt.– 24/64
  • 25. Introducción Primeras pinceladas Ahora en serio Avanzado Propiedades: Q_PROPERTY Qt incluye un sofisticado sistema de propiedades, similar al que proporcionan algunos compiladores. Q_PROPERTY( type name READ getFunction [WRITE setFunction ] [RESET resetFunction ] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool ] ) Salvador Alemany Garrido– Introducción a Qt.– 25/64
  • 26. Introducción Primeras pinceladas Ahora en serio Avanzado Propiedades II Quien es quien: 1 READ: una función de lectura, obligatoria. 2 WRITE: una función para modificar el valor de la propiedad, opcional. 3 RESET: función opcional, para que la propiedad vuelva al valor por defecto. 4 NOTIFY: opcional, emite una señal cuando el valor de la propiedad cambia. Salvador Alemany Garrido– Introducción a Qt.– 26/64
  • 27. Introducción Primeras pinceladas Ahora en serio Avanzado Propiedades III 1 DESIGNABLE: indica si estará disponible en el diseñador, por defecto true. 2 SCRIPTABLE: indica si estará disponible para QtScript, por defecto true. 3 STORED: indica si la propiedad es de un valor por si mismo o dependiente de otros y si debe ser salvado cuando se guarda el estado del objeto, por defecto true. 4 USER: editable por el usuario. Salvador Alemany Garrido– Introducción a Qt.– 27/64
  • 28. Introducción Primeras pinceladas Ahora en serio Avanzado Propiedades IV Uso y justificación Se puede acceder a una propiedad usando QObject::setProperty(const char *, QVariant &) y QObject::property(const char *) sin saber nada sobre la clase excepto el nombre de la propiedad. Es preferible usar directamente las funciones READ y WRITE, ya que son más rápidas y proporcionan mejores diagnósticos en tiempo de compilación. Pero requieren conocer la clase en tiempo de compilación, y los genéricos no. ejemplo QPushButton ∗ button = new QPushButton ; QObject ∗ object = button ; button−>setDown( true ) ; object−>setProperty ( "down" , true ) ; Salvador Alemany Garrido– Introducción a Qt.– 28/64
  • 29. Introducción Primeras pinceladas Ahora en serio Avanzado El árbol de objetos Utilidad Los QObjects se organizan a si mismos en arboles de objetos. Cuando creas un QObject con otro como padre, es añadido a la lista de hijos(accesible con children()) y será borrado cuando el padre lo sea. button = new QPushButton ( "Salir" , this ) ; Salvador Alemany Garrido– Introducción a Qt.– 29/64
  • 30. Introducción Primeras pinceladas Ahora en serio Avanzado Eventos Que hacer con ellos Los eventos en Qt son objetos que derivan de la clase QEvent. A efectos prácticos típicamente para manejar eventos de forma personalizada reimplementamos funciones virtuales. Salvador Alemany Garrido– Introducción a Qt.– 30/64
  • 31. Introducción Primeras pinceladas Ahora en serio Avanzado Contenido 3 Ahora en serio Extensiones a C++ Algunas clases de interés Herramientas Salvador Alemany Garrido– Introducción a Qt.– 31/64
  • 32. Introducción Primeras pinceladas Ahora en serio Avanzado QWidget Hereda de QObject y QPaintDevice La base de todos los widgets, y componente atómico de la interfaz. Un Widget sin un padre es una ventana independiente. setWindowTitle() y setWindowIcon() establecen la barra de titulo y el icono respectivamente. El constructor de todo Widget debe aceptar uno o 2 de los argumentos siguientes: QWidget *parent = 0: Si es 0 será una ventana principal. Qt::WindowFlags f = 0: establecer parámetros especiales para la ventana. Salvador Alemany Garrido– Introducción a Qt.– 32/64
  • 33. Introducción Primeras pinceladas Ahora en serio Avanzado QWidget QWidget(e hijos) usa doble-buffer automáticamente Es posible crear ventanas con transparencias. (en X11: solo con Kwin o Compiz) Aparte de los estilos estándar podemos aplicar estilos usando CSS. Funcionalidades básicas: cursores, eventos, detección de pantalla completa, tooltips... Salvador Alemany Garrido– Introducción a Qt.– 33/64
  • 34. Introducción Primeras pinceladas Ahora en serio Avanzado Diálogos I QDialog e hijos QDialog es la base de las ventanas de diálogos. Disponemos básicamente de: QColorDialog QErrorMessage QFileDialog QFontDialog QInputDialog QMessageBox QPageSetupDialog QPrintDialog QPrintPreviewDialog QProgressDialog QWizard Salvador Alemany Garrido– Introducción a Qt.– 34/64
  • 35. Introducción Primeras pinceladas Ahora en serio Avanzado Diálogos II Descripción detallada Un dialogo es una ventana de primer nivel siempre, usada para tareas y comunicaciones breves con el usuario. Posibilidades Diálogos modales: se aplica con exec() Diálogos no modales: usando el método show() Botones por defecto: Se cierran con ESC: ejecutando reject() en la salida Extensibilidad: véase Extension example Salvador Alemany Garrido– Introducción a Qt.– 35/64
  • 36. Introducción Primeras pinceladas Ahora en serio Avanzado Qt MainWindow Framework QMainWindow y amigos Podemos entender que QMainWindow nos proporciona un marco de trabajo, para construir una GUI. QMainWindow tiene su propio layout al que se puede añadir QToolBars, QDockWidgets, un QMenu, y una QStatusBar. Salvador Alemany Garrido– Introducción a Qt.– 36/64
  • 37. Introducción Primeras pinceladas Ahora en serio Avanzado QMainWindow El widget central El widget central puede ser cualquier widged de Qt como QTextEdit o QGraphicsView o uno personalizado. Establecemos el widget central con setCentralWidget() Una ventana principal puede tener una único(SDI) o múltiple(MDI) interfaz de documentos. Para hacer una aplicación MDI establece una QMDIArea como widget principal. Podemos almacenar y restaurar el layout con: saveState(); restoreState(); Salvador Alemany Garrido– Introducción a Qt.– 37/64
  • 38. Introducción Primeras pinceladas Ahora en serio Avanzado QMainWindow Menús Creación de menús Los menús se implementan con QMenu y se mantienen organizados en una QMenubar. Cada entrada es una QAction. Añadimos menús con addMenu(QMenu), y acciones a los menús con con addAcction(QAction) Ejemplo void MainWindow : : createMenus ( ) { fileMenu = menuBar()−>addMenu( t r ( "&File" ) ) ; fileMenu−>addAction (newAct ) ; fileMenu−>addAction ( openAct ) ; fileMenu−>addAction ( saveAct ) ; Salvador Alemany Garrido– Introducción a Qt.– 38/64
  • 39. Introducción Primeras pinceladas Ahora en serio Avanzado QMainWindow Toolbars: barras de herramientas Creación de toolbars creamos una instancia de QToolBar y la añadimos con addToolbar, los elementos también son QActions. Ejemplo void MainWindow : : createToolBars ( ) { f i l e T o o l B a r = addToolBar ( t r ( "File" ) ) ; fileToolBar − >addAction (newAct ) ; Salvador Alemany Garrido– Introducción a Qt.– 39/64
  • 40. Introducción Primeras pinceladas Ahora en serio Avanzado QString I Clase de manejo de texto Unicode. Almacena una cadena de QChars, siendo cada QChar de 16 bits Usa compartición implícita de memoria, con copia en escritura. Dispone de funciones para convertir de y a números Es muy recomendable manejar las listas de QStrings usando QStringList Salvador Alemany Garrido– Introducción a Qt.– 40/64
  • 41. Introducción Primeras pinceladas Ahora en serio Avanzado QString II Dispone de 4 conversiones a const char * toAscii(): Autoexplicativo toLatin(): Convierte a una cadena de la codificación latin-1(ISO 8859-1 toUtf8(): Convierte a UTF-8 toLocal8Bit(): A la codificación local Salvador Alemany Garrido– Introducción a Qt.– 41/64
  • 42. Introducción Primeras pinceladas Ahora en serio Avanzado QString III Gracias al sistema de tipos de C++ y al hecho de que QString es implícitamente compartida, pueden ser tratadas como tipos básicos como int. Inicialización Bastante típica, diversas alternativas: QString str1 ( "Hello" ) ; QString str2 = "Hello" ; static const QChar data [4] = {0x0055 , 0x006e , 0x10e3 , 0x03a3}; QString str3 ( data , 4 ) ; También carácter a carácter. O en retornos de funciones. return str1 ; Salvador Alemany Garrido– Introducción a Qt.– 42/64
  • 43. Introducción Primeras pinceladas Ahora en serio Avanzado Otros widgets básicos Botones QCheckBox, QPushButton, QRadioButton, QToolButton y QCommandLinkButton. Texto QLineEdit, QPlainTextEdit, QTextEdit, QTextBrowser Otros contenedores QMDIArea, QTabWidget, QStackedWidget Salvador Alemany Garrido– Introducción a Qt.– 43/64
  • 44. Introducción Primeras pinceladas Ahora en serio Avanzado Layouts Basicamente se usan las siguientes posibilidades: QHBoxLayout organiza los widgets en una fila horizontal QVBoxLayout alínea los widgets en una columna vertical QGridBoxLayout organiza los widgets en una rejilla, un widget puede ocupar varias casillas QFormLayout Alternativa de alto nive a QGridBoxLayout para layouts de 2 columnas. Salvador Alemany Garrido– Introducción a Qt.– 44/64
  • 45. Introducción Primeras pinceladas Ahora en serio Avanzado Contenido 3 Ahora en serio Extensiones a C++ Algunas clases de interés Herramientas Salvador Alemany Garrido– Introducción a Qt.– 45/64
  • 46. Introducción Primeras pinceladas Ahora en serio Avanzado Qt Designer I Simplemente Escribir código de interfaces tiene mucho de aburrido, repetitivo y rutinario. Es posible, en bastantes casos y recomendable usar un diseñador de interfaces. Aparte de eso las vemos tal cual las hacemos. designer Para, diseñar y crear interfaces de forma visual y cómoda con Qt disponemos de Qt Designer, bien standalone, bien integrado en Eclipse o Qt Creator Salvador Alemany Garrido– Introducción a Qt.– 46/64
  • 47. Introducción Primeras pinceladas Ahora en serio Avanzado Qt Designer En imágenes I La interfaz puede ser configurada para funcionar con una sola o con varias ventanas. Salvador Alemany Garrido– Introducción a Qt.– 47/64
  • 48. Introducción Primeras pinceladas Ahora en serio Avanzado Qt Designer En imágenes II Salvador Alemany Garrido– Introducción a Qt.– 48/64
  • 49. Introducción Primeras pinceladas Ahora en serio Avanzado Qt Designer La mejor manera de aprender a usar un diseñador de interfaces es usarlo. En caso de duda consulta primero la documentación. Salvador Alemany Garrido– Introducción a Qt.– 49/64
  • 50. Introducción Primeras pinceladas Ahora en serio Avanzado qmake I Qmake es la herramienta de generación de Makefiles oficial de Qt4. Características: Optimizado para Qt4 Automáticamente genera reglas de compilación para moc y uic. Genera proyectos para el Visual Studio. Salvador Alemany Garrido– Introducción a Qt.– 50/64
  • 51. Introducción Primeras pinceladas Ahora en serio Avanzado qmake II Variables I Modificamos valores de una variable con la sintaxis: VARIABLE ± = valor SOURCES Ficheros de código fuente del proyecto. Algunas variables de interés: SOURCES: los ficheros de código fuente. SOURCES += file.cpp HEADERS: cabeceras del proyecto. HEADERS += file.h FORMS: Archivos de interfaces(.ui) FORMS += dialog.ui TARGET: nombre de la aplicación o librería; por defecto el nombre del proyecto CONFIG: opciones, merece un vistazo en profundidad Salvador Alemany Garrido– Introducción a Qt.– 51/64
  • 52. Introducción Primeras pinceladas Ahora en serio Avanzado qmake III RESOURCES: una lista de ficheros de recursos a incluir TEMPLATE: la plantilla a usar para el proyecto disponemos de app, lib, subdirs(reglas para subdirectorios), vcapp, vclib. DEFINES: para incluir definiciones con el preprocesador QT: indica que componentes de Qt incluye el proyecto, por defecto core y gui Salvador Alemany Garrido– Introducción a Qt.– 52/64
  • 53. Introducción Primeras pinceladas Ahora en serio Avanzado qmake IV Los módulos de Qt Opción Modulo core QtCore gui QtGui network QtNetwork opengl QtOpenGL sql QtSql svg QtSvg xml QtXml xmlpatterns QtXmplPatterns webkit QtWebKit qt3support Qt3Support Salvador Alemany Garrido– Introducción a Qt.– 53/64
  • 54. Introducción Primeras pinceladas Ahora en serio Avanzado qmake V CONFIG CONFIG es el cajón de sastre de las opciones. Opción Descripción release Crea el proyecto en modo release debug Crea el proyecto en modo debug debug_and_release Crea el proyecto en ambos modos debug_and_release_target ídem y en subdirectorios build_all compila todos los modos warn_on Habilita todos los warnings posibles warn_off Deshabilita bastantes warnings Salvador Alemany Garrido– Introducción a Qt.– 54/64
  • 55. Introducción Primeras pinceladas Ahora en serio Avanzado qmake Consejos y recordatorios Comandos Crear proyecto con: qmake -project Generar Makefiles simplemente: qmake Trucos Usa QMAKE_LFLAGS += -s en modo release para generar ejecutables más pequeños Puedes dar opciones dependientes de plataforma simplemente poniendo el nombre de la plataforma seguido de unas llaves y las opciones entre ellas Lee la documentación, hay para hacer 40 transparencias más, aparte de funcionalidades no documentadas. Salvador Alemany Garrido– Introducción a Qt.– 55/64
  • 56. Introducción Primeras pinceladas Ahora en serio Avanzado Qt Assistant La aplicación Es un sencillo y potente visor de documentación que proporciona múltiples maneras de acceder a la información. De forma jerárquica en contenidos, búsquedas sobre el índice o todo el contenido y marcadores. Permite añadir nuestra propia documentación, si esta en el formato qch(Qt compressed help). ¿Que información contiene? Por defecto incluye la documentación de Qt, qmake, Qt Assistant, Qt Dessigner, Qt Linguist, y en ocasiones Qt Creator. Salvador Alemany Garrido– Introducción a Qt.– 56/64
  • 57. Introducción Primeras pinceladas Ahora en serio Avanzado Contenido 1 Introducción 2 Primeras pinceladas 3 Ahora en serio 4 Avanzado Salvador Alemany Garrido– Introducción a Qt.– 57/64
  • 58. Introducción Primeras pinceladas Ahora en serio Avanzado Contenido 4 Avanzado Programación Modelo-Vista Salvador Alemany Garrido– Introducción a Qt.– 58/64
  • 59. Introducción Primeras pinceladas Ahora en serio Avanzado Componentes del modelo-vista models Proporcionan una interfaz estándar que vistas y delegados usan para acceder a los datos. Los datos en si no están almacenados en el modelo. Views las vistas obtienen datos del modelo y los muestran al usuario. Delegates Obtienen datos de los usuarios. Salvador Alemany Garrido– Introducción a Qt.– 59/64
  • 60. Introducción Primeras pinceladas Ahora en serio Avanzado Las Graphics view Las Graphics View proporcionan una superficie para gestionar e interactuar con un gran número de componentes 2D personalizados. Como aproximación al Model-View Es un modelo basado en componentes. Varias vistas pueden observar una misma escena y una escena puede contener items de variados shapes geométricos. La escena: Proporcionada por QGraphicsScene La vista: Proporcionada por QGraphicsView El item: proporcionado por QGraphicsItem, y QGraphicsWidget(No hereda de QWidget) Salvador Alemany Garrido– Introducción a Qt.– 60/64
  • 61. Introducción Primeras pinceladas Ahora en serio Avanzado Otros puntos de interes I Dentro de QtGui Qt Style Sheets:1 hojas de estilo con una sintaxis similar a la del CSS web. Drag and Drop: arrastrar y soltar La página All Overviews and HOWTOs puede ser un buen punto de inicio para buscar en caso de buscar información sobre temas de interés como la internacionalización, intercomunicación de procesos, teclados, plugins, integración con el escritorio... 1 Consultar las páginas con estos nombres Salvador Alemany Garrido– Introducción a Qt.– 61/64
  • 62. Introducción Primeras pinceladas Ahora en serio Avanzado Otros puntos de interes II General QtConcurrent, primitivas orientadas a objetos para programación multihilo, así como apis de alto nivel. Otros cosas a tener en cuenta al desarrollar aplicaciones como manejo de eventos(más general), y recursos(qrc) Salvador Alemany Garrido– Introducción a Qt.– 62/64
  • 63. Introducción Primeras pinceladas Ahora en serio Avanzado Fuentes Recursos útiles si quieres profundizar Web de la documentación de Qt C++ Gui Programming with Qt4, 2nd Edition Jasmin Blanchette y Mark Summerfield Edición vieja disponible para descarga. An introduction to design patterns in C++ with Qt 4 Ezust, Alan, Upper Saddle River [etc.] Salvador Alemany Garrido– Introducción a Qt.– 63/64
  • 64. Introducción Primeras pinceladas Ahora en serio Avanzado ¿Preguntas o sugerencias? Salvador Alemany Garrido salalgar@fiv.upv.es Salvador Alemany Garrido– Introducción a Qt.– 64/64