introduccion qt

64
Introducción ¡Hola mundo! Ahora en serio Avanzado Introducción a Qt. Desarrollo con C++ y Qt4 Salvador Alemany Garrido 14 de noviembre de 2010 Salvador Alemany Garrido– Introducción a Qt.– 1/64

Upload: h529212

Post on 25-Jul-2015

158 views

Category:

Documents


4 download

DESCRIPTION

Guia rapida de programación en c++ con Qt4

TRANSCRIPT

Page 1: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Introducción a Qt.Desarrollo con C++ y Qt4

Salvador Alemany Garrido

14 de noviembre de 2010

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

Page 2: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Contenido

1 Introducción

2 ¡Hola mundo!

3 Ahora en serio

4 Avanzado

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

Page 3: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Contenido

1 Introducción

2 ¡Hola mundo!

3 Ahora en serio

4 Avanzado

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

Page 4: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Conocimientos previos

RequisitosImprescidible: conocimientos básicos de C++, o bien C yJava.Importante:

Saber usar las herramientas básicas de desarrollo.Conocimientos básicos de estructuras de datos.Leer fluidamente inglés, la documentación oficial estásolo en inglés.

ObjetivosConocer los componentes y las posibilidades de Qt.Saber crear una aplicación, y opciones básicas.Presentar los cambios que introduce Qt a C++Uso de widges básicos.

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

Page 5: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

¿Qué es Qt?

Qt es un framework de desarrollo de aplicacionesmultiplataforma.un conjunto de herramientas para facilitar el desarrollo deaplicaciones.Extensiones a la sintaxis de C++.

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

Page 6: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Qt como framework y herramientas

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

Page 7: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Qt, los módulos I

QtCore contiene el núcleo no gráfico de QtQtGui La colección básica de componentes gráficos

QtNetwork Clases para escribir clientes y servidores TCP/IPQtOpenGL Para facilitar el uso de openGLQtScript Expone las aplicaciones a scripting con un

lenguaje ECMAscriptQtScriptTools un depurador de QtScript

QtSQL integración de bases de datosQtSVG Soporte SVG

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

Page 8: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Qt, los Módulos II

QtWebKit el popular motor web, con QtQtXml soporte básico de Xml

QtXmlPatterns un motor de XQuery 1.0 y XPath 2.0 yparcialmente Xslt

Phonon El framework multimediaOtros QtDeclarative, QtDessigner, QtUiTools, QtHelp,

QtTest, QtDBus(solo Unix), QtOpenVG,Qt3Support y QtMultimedia

Y aún más en Qt Solutions.

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

Page 9: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Herramientas

DesarrolloEditor de textos y/o IDE. Kate y Qt Creatorqmake: gestión de proyectosQt designer: diseñador de interfacesQt assistant: visor de documentaciónQt linguist, lupdate, lrelease: traducción

Otras HerramientasCmake: alternativa más flexible y potente a qmakeGettext: traduccionesOtros IDEs: Eclipse, Netbeans, Visual Studio

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

Page 10: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Contenido

1 Introducción

2 ¡Hola mundo!

3 Ahora en serio

4 Avanzado

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

Page 11: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Tipos IQtGlobal: tipos básicos

Tipos globalesSe dispone de los típicos alias para los tipos básicos:

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

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

Page 12: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Tipos IIContenedores genéricos

Qt incluye una colección de contenedores genéricos:QList es el contenedor genérico más usado, no es unalista enlazada como std::list (el equivalente seríaQLinkedList) sino que internamente usa un indice enarray, es la clase padre de QStringList clave paragestionar 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 elementosy no a los elementos.

Más información en Container Classes

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

Page 13: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Tipos IILas clases básicas del sistema de objetos

QObjectLa base del sistema de objetos de Qt. Todo Widget y lamayoría de las otras clases de Qt heredan de él.

QApplication o QCoreApplicationLa clase QApplication efectúa el control de flujo y lasopciones principales de la aplicación. Solo una instancia poraplicación. Debe crearse antes de cualquier objeto relacionadocon la GUI.

QWidgetLa base de todos los objetos de interfaz de usuario. Los máscomunes son QMainWindow y QDialog y sus subclases.

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

Page 14: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Hola mundo

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

Page 15: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

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

ejemplo

#inc lude <QApp l i ca t i on>#inc lude <QLabel>

i n t main ( i n t argc , char ∗ argv [ ] ) {QApp l i c a t i on app ( argc , a rgv ) ; // 1 Crea r una app

// y s o l o una ,QLabel l a b e l ("Hello Qt!" ) ; // 2 Crea r un widget

l a b e l . show ( ) ; // 3 Mostramos e l w idget

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

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

Page 16: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Compilación

ProcedimientoSi vas a trabajar sin soporte de un IDE, para compilar debeshacer lo siguiente, desde la carpeta del proyecto.

1 qmake -project # Genera proyecto# independiente de SO y compilador

2 qmake # Genera Makefiles3 make # Compila4 ??? # como se llame tu programa5 profit

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

Page 17: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Contenido

1 Introducción

2 ¡Hola mundo!

3 Ahora en serio

4 Avanzado

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

Page 18: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Contenido

3 Ahora en serioExtensiones a C++Algunas clases de interésHerramientas

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

Page 19: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Extensiones a C++ I¿Usar C++ estándar? ¿Es broma?

Qt extiende C++Qt incluye una serie de funcionalidades que no estánnormalmente en C++. Para ello usa su propio preprocesadorllamado MOC(Meta-Object Compiler)

Los MetaobjetosQt usa en gran parte de su API un tipo especial de objetos nonativo de C++, los metabjetos, los cuales se caracterizan por.

signals y slotsPropiedades,Arboles de objetos.QVariantEventos, Timers: Véase Timers

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

Page 20: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QObject¿Quizás quiso decir java.lang.object?

UsoPara 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 moc, gestionado por qmake o cmake.

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

Page 21: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QObject II

Ejemplo

c l a s s MyDialog : pub l i c QDialog{

Q_OBJECT

pub l i c :MyDialog (QWidget ∗ pa r en t = 0 ) ; // Atentos a~MyDialog ( ) ; // e s t e argumento o p c i o n a l

pr i va te :QPushButton ∗ button ;

} ;

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

Page 22: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Signals y Slots I

Son un mecanismo de comunicación entre objetos que heredande QObject. Características:

Son type-safe, la firma de la señal debe encajar con lafirma del slotLos slots son funciones que pueden ser llamadosnormalmente.Los slots privados, pueden ser invocados por una señalcualquiera independientemente del nivel de acceso.Las clases que emiten señales no necesitan preocuparse deque slot recibe la señal.

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

Page 23: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Signals y slots IIDeclaración de Slots

SlotsSimplemente métodos en una clase que herede de QObjectcon la macro Q_OBJECT, declarados después de una de lassiguientes líneas:

public slots:protected slots:private slots:

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

Page 24: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Signals y slots IIIEmisión de señales

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

usos i g n a l s : // De c l a r a re xamp l eS i gna l ( i n t emi tVa lue ) ;

// e j emp lo de e m i t i remit e xamp l eS i gna l ( 4 ) ;

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

Page 25: IntroDuccion Qt

Introducción ¡Hola mundo! 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∗ s i g n a l ,const QObject∗ r e c e i v e r , const char∗ s l o t ,Qt : : Connect ionType type = QtAutoConnect ion )

Ejemplo

connect ( button , SIGNAL( c l i c k e d ( ) ) , qApp , SLOT( qu i t ( ) ) ) ;// qApp es para ac c ede r a l a QApp l i c a c t i on g l o b a l

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

Page 26: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

El árbol de objetos

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

but ton = new QPushButton ("Salir" , th i s ) ;

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

Page 27: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

El árbol de objetos

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

Page 28: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

EventosQue hacer con ellos

Los eventos en Qt son objetos que derivan de la clase QEvent.Típicamente para manejar eventos de forma personalizadareimplementamos funciones virtuales. Un ejemplo seríaQMouseEvent.

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

Page 29: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Propiedades: Q_PROPERTY

Qt incluye un sofisticado sistema de propiedades, similar al queproporcionan algunos compiladores.

Q_PROPERTY( type nameREAD ge tFunc t i on[WRITE s e tFun c t i o n ][RESET r e s e t F u n c t i o n ][DESIGNABLE bool ][ SCRIPTABLE bool ][STORED bool ][USER bool ] )

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

Page 30: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Contenido

3 Ahora en serioExtensiones a C++Algunas clases de interésHerramientas

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

Page 31: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QWidget

Hereda de QObject y QPaintDevice La base de todos loswidgets, y componente atómico de la interfaz.Un Widget sin un padre es una ventana independiente.setWindowTitle() y setWindowIcon() establecen la barra detitulo y el icono respectivamente.El constructor de todo Widget debe aceptar uno o 2 de losargumentos siguientes:

QWidget *parent = 0: Si es 0 será una ventana principal.Qt::WindowFlags f = 0: establecer parámetros especialespara la ventana.

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

Page 32: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QWidget

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

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

Page 33: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Diálogos IQDialog e hijos

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

QColorDialog QErrorMessage QFileDialogQFontDialog QInputDialog QMessageBoxQPageSetupDialog QPrintDialog QPrintPreviewDialogQProgressDialog QWizard

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

Page 34: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Diálogos IIDescripción detallada

Un dialogo es una ventana de primer nivel siempre, usada paratareas 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 salidaExtensibilidad: véase Extension example

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

Page 35: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Qt MainWindow FrameworkQMainWindow y amigos

Podemosentender que QMainWindownos proporciona un marcode trabajo, para construiruna GUI. QMainWindowtiene su propio layout al quese puede añadir QToolBars,QDockWidgets, unQMenu, y una QStatusBar.

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

Page 36: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QMainWindowEl widget central

El widget centralpuede ser cualquier widged de Qt como QTextEdit oQGraphicsView o uno personalizado. Establecemos el widgetcentral con setCentralWidget()Una ventana principal puede tener una único(SDI) omúltiple(MDI) interfaz de documentos. Para hacer unaaplicación MDI establece una QMDIArea como widgetprincipal.

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

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

Page 37: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QMainWindowMenús

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

Ejemplo

void MainWindow : : c reateMenus ( ) {f i l eMenu = menuBar()−>addMenu ( t r ("&File" ) ) ;f i l eMenu−>addAct ion ( newAct ) ;f i l eMenu−>addAct ion ( openAct ) ;f i l eMenu−>addAct ion ( saveAct ) ;

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

Page 38: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QMainWindowToolbars: barras de herramientas

Creación de toolbarscreamos una instancia de QToolBar y la añadimos conaddToolbar, los elementos también son QActions.

Ejemplo

void MainWindow : : c r e a t eToo lBa r s ( ){

f i l e T o o l B a r = addToolBar ( t r ("File" ) ) ;f i l eTo o lB a r−>addAct ion ( newAct ) ;

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

Page 39: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QString I

Clase de manejo de texto Unicode. Almacena una cadenade QChars, siendo cada QChar de 16 bitsUsa compartición implícita de memoria, con copia enescritura.Dispone de funciones para convertir de y a númerosEs muy recomendable manejar las listas de QStringsusando QStringList

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

Page 40: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QString II

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

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

Page 41: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

QString III

Las QStrings pueden ser tratadas como tipos básicos como int.

InicializaciónBastante típica, diversas alternativas:

QStr ing s t r 1 ("Hello" ) ;QSt r ing s t r 2 = "Hello" ;s t a t i c const QChar data [ 4 ] = {0x0055 , 0x006e ,0 x10e3 , 0 x03a3 } ; QStr ing s t r 3 ( data , 4 ) ;

También carácter a carácter.

O en retornos de funciones.

return s t r 1 ;

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

Page 42: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Otros widgets básicos

BotonesQCheckBox, QPushButton, QRadioButton, QToolButton yQCommandLinkButton.

TextoQLineEdit, QPlainTextEdit, QTextEdit, QTextBrowser

Otros contenedoresQMDIArea, QTabWidget, QStackedWidget

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

Page 43: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

LayoutsLayouts convencionales para widgets convencionales

Basicamente se usan las siguientes posibilidades:QHBoxLayout organiza los widgets en una fila horizontalQVBoxLayout alínea los widgets en una columna verticalQGridBoxLayout organiza los widgets en una rejilla, un widget

puede ocupar varias casillasQFormLayout Alternativa de alto nive a QGridBoxLayout para

layouts de 2 columnas.

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

Page 44: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Contenido

3 Ahora en serioExtensiones a C++Algunas clases de interésHerramientas

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

Page 45: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Qt Designer I

NecesidadEscribir código de interfaces tiene mucho de aburrido,repetitivo y rutinario. El paradigma WYGIWYS tiene ventajas.

designerPara, diseñar y crear interfaces de forma visual y cómoda conQt disponemos de Qt Designer, bien standalone, bienintegrado en Eclipse o Qt Creator

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

Page 46: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Qt DesignerEn imágenes I

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

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

Page 47: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Qt DesignerEn imágenes II

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

Page 48: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Qt Designer

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

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

Page 49: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

qmake I

Qmake es la herramienta de generación de Makefiles oficial deQt4.Características:

Optimizado para Qt4Automáticamente genera reglas de compilación para mocy uic.Genera proyectos para el Visual Studio.

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

Page 50: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

qmake IIVariables 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.cppHEADERS: cabeceras del proyecto. HEADERS += file.hFORMS: Archivos de interfaces(.ui) FORMS += dialog.uiTARGET: nombre de la aplicación o librería; por defectoel nombre del proyectoCONFIG: opciones, merece un vistazo en profundidad

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

Page 51: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

qmake III

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

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

Page 52: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

qmake IVLos módulos de Qt

Opción Modulocore QtCoregui QtGuinetwork QtNetworkopengl QtOpenGLsql QtSqlsvg QtSvgxml QtXmlxmlpatterns QtXmplPatternswebkit QtWebKitqt3support Qt3Support

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

Page 53: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

qmake VCONFIG

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

Opción Descripciónrelease Crea el proyecto en modo releasedebug Crea el proyecto en modo debugdebug_and_release Crea el proyecto en ambos modosdebug_and_release_target ídem y en subdirectoriosbuild_all compila todos los modoswarn_on Habilita todos los warnings posibleswarn_off Deshabilita bastantes warnings

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

Page 54: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

qmakeConsejos y recordatorios

ComandosCrear proyecto con: qmake -projectGenerar Makefiles simplemente: qmake

NotasQMAKE_LFLAGS += -s en modo release para generarejecutables más pequeñosPuedes dar opciones dependientes de plataformasimplemente poniendo el nombre de la plataforma seguidode unas llaves y las opciones entre ellasLee la documentación, hay para hacer 40 transparenciasmás, aparte de funcionalidades no documentadas.

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

Page 55: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Qt Assistant

La aplicaciónEs un sencillo y potente visor de documentación en formatoQCH(Qt compressed help).Permite añadir nuestra propia documentación.

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

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

Page 56: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Contenido

1 Introducción

2 ¡Hola mundo!

3 Ahora en serio

4 Avanzado

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

Page 57: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Contenido

4 AvanzadoProgramación Modelo-Vista

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

Page 58: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Componentes del modelo-vista

models Proporcionanuna interfaz estándarque vistas y delegados usan paraacceder a los datos. Los datosen si no están almacenados en elmodelo. Aunque podrían estarlo.

Views las vistas obtienen datos delmodelo y los muestran al usuario.

Delegates Obtienen datos de los usuarios.

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

Page 59: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Las Graphics view

Las Graphics View proporcionan una superficie para gestionare interactuar con un gran número de componentes 2Dpersonalizados.

Como aproximación al Model-ViewEs un modelo basado en componentes. Varias vistas puedenobservar una misma escena y una escena puede contener itemsde variados shapes geométricos.La escena: Proporcionada por QGraphicsSceneLa vista: Proporcionada por QGraphicsViewEl item: proporcionado por QGraphicsItem, y

QGraphicsWidget(No hereda de QWidget)

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

Page 60: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Otros puntos de interes IDentro de QtGui

Qt Style Sheets:1 hojas de estilo con una sintaxis similar ala del CSS web.Drag and Drop: arrastrar y soltarLa página All Overviews and HOWTOs puede ser unbuen punto de inicio para buscar en caso de buscarinformación sobre temas de interés como lainternacionalización, intercomunicación de procesos,teclados, plugins, integración con el escritorio...

1Consultar las páginas con estos nombresSalvador Alemany Garrido– Introducción a Qt.– 60/64

Page 61: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Otros puntos de interes IIGeneral

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

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

Page 62: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

Recapitulando

ConceptopsQt, plataforma para desarrollar aplicaciones.No uses std::stringUsa qmake o cmakeEs que clases que hereden de QObject deben incluir lamacro Q_OBJECT aunque no usen signals slots.Investiga en Qt Solutions, y Qxt en busca de librerías.

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

Page 63: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

FuentesRecursos útiles si quieres profundizar

Web de la documentación de Qt

C++ Gui Programming with Qt4, 2nd EditionJasmin Blanchette y Mark Summerfield

Edición vieja disponible para descarga.

An introduction to design patterns in C++ with Qt 4Ezust, Alan, Upper Saddle River [etc.]

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

Page 64: IntroDuccion Qt

Introducción ¡Hola mundo! Ahora en serio Avanzado

¿Preguntas o sugerencias?

Salvador Alemany [email protected]

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