64
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 a Qt

  • Upload
    salalgar

  • View
    11.983

  • Download
    5

Embed Size (px)

DESCRIPTION

Presentación del seminario de formación de PoLinuX de introducción a la programación de aplicaciones de escritorio en C++ con Qt.

Citation preview

Page 1: Introducción a Qt

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

Page 2: Introducción a Qt

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

Page 3: Introducción a Qt

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

Page 4: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Prerequisitos de la charla y objetivos

Requisitos

Imprescidible: conocimientos básicos de C++, obien C y Java.

Importante:Nociones de depuradores e IDEsNivel de inglés suficiente para la documentaciónoficial

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

Page 5: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

¿Qué es Qt?

Qt es un framework de desarrollo de aplicacionesmultiplataforma.

Viene acompañado de un conjunto de herramientaspara facilitar su uso.

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

Page 6: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

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

Page 7: Introducción a Qt

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 servidoresTCP/IP

QtOpenGL Para facilitar el uso de openGL

QtScript Expone las aplicaciones a scripting con unlenguaje 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

Page 8: Introducción a Qt

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 yparcialmente Xslt

Phonon El framework multimedia

Qt3Support Compatibilidad con Qt3

Otros QtDessigner, QtUiTools, QtHelp, QtAssistant,QtTest, QtDBus(solo Unix), y a partir de Qt4.6 QtOpenVG y QtMultimedia

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

Page 9: Introducción a Qt

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

Page 10: Introducción a Qt

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

Page 11: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Tipos IQtGlobal: tipos básicos

Tipos globales

Tenemos 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: Introducción a Qt

Introducción Primeras pinceladas 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 esuna lista enlazada como std::list (el equivalentesería QLinkedList) sino que internamente usa unindice en array, es la clase padre de QStringListclave para gestionar colecciones de QString.

Otros: QLinkedList, QVector, QStack, QQueue,QSet, QMap, QMultiMap, QHash, QMultiHash.

Lo contenedores de Qt disponen de 2 tipos deiteradores: estilo STL, y estilo Java, que aputanentre los elementos y no a los elementos.

Más información en Container Classes

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

Page 13: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Tipos IILas clases básicas del sistema de objetos

QObject

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

QApplication o QCoreApplication

La clase QApplication efectúa el control de flujo y lasopciones principales de la aplicación. Solo una instanciapor aplicación. Debe crearse antes de cualquier objetorelacionado con la GUI.

QWidget

La base de todos los objetos de interfaz de usuario. Losmás comunes son QMainWindow y QDialog y sussubclases.

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

Page 14: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

1er 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 el widget

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

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

Page 15: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Compilación

Procedimiento

Si vas a trabajar sin soporte de un IDE, como en esteejemplo para compilar debes hacer lo siguiente, desdela 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.– 15/64

Page 16: Introducción a Qt

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

Page 17: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Contenido

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

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

Page 18: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Extensiones a C++ IPorque C++ no es suficiente complejo

Qt no es exactamente C++

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

Los Metaobjetos

Qt usa en gran parte de su API un tipo especial deobjetos no nativo de C++, los metabjetos, los cuales secaracterizan por.

signals y slots

Propiedades,

Arboles de objetos.

Eventos

Timers: Véase TimersSalvador Alemany Garrido– Introducción a Qt.– 18/64

Page 19: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

QObject

Uso

Para crear y usar un metaobjeto tenemos que hacer 3cosas:

1 Heredar de QObject.

2 Incluir Q_OBJECT en la primera línea de ladeclaración.

3 Usar el Meta-object compiler, gestionado porqmake.

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

Page 20: Introducción a Qt

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

Page 21: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Signals y Slots I

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

Son type-safe, la firma de la señal debe encajar conla firma del slot

Los slots son funciones que pueden ser llamadosnormalmente.

Los slots privados, pueden ser invocados por unaseñal cualquiera independientemente del nivel deacceso.

Las clases que emiten señales no necesitanpreocuparse de que slot recibe la señal.

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

Page 22: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Signals y slots IIDeclaración de Slots

Slots

Simplemente métodos en una clase que herede deQObject con la macro Q_OBJECT, declarados después deuna de las siguientes líneas:

public slots:protected slots:private slots:

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

Page 23: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Signals y slots IIIEmisión de señales

signals

Se declaran como si fueran funciones, en una secciónpropia, pero no se implementan. El moc genera el códigonecesario.

uso

signals : / / DeclararexampleSignal ( int emitValue ) ;

/ / ejemplo de emitiremit exampleSignal (4) ;

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

Page 24: Introducción a Qt

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∗ slot ,Qt : : ConnectionType type = QtAutoConnection)

Ejemplo

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

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

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

Page 25: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Propiedades: Q_PROPERTY

Qt incluye un sofisticado sistema de propiedades, similaral que proporcionan algunos compiladores.

Q_PROPERTY( type nameREAD getFunction[WRITE setFunction ][RESET resetFunction ][DESIGNABLE bool][SCRIPTABLE bool][STORED bool][USER bool ] )

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

Page 26: Introducción a Qt

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 lapropiedad, opcional.

3 RESET: función opcional, para que la propiedadvuelva al valor por defecto.

4 NOTIFY: opcional, emite una señal cuando el valorde la propiedad cambia.

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

Page 27: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Propiedades III

1 DESIGNABLE: indica si estará disponible en eldiseñador, por defecto true.

2 SCRIPTABLE: indica si estará disponible paraQtScript, por defecto true.

3 STORED: indica si la propiedad es de un valor por simismo o dependiente de otros y si debe ser salvadocuando se guarda el estado del objeto, por defectotrue.

4 USER: editable por el usuario.

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

Page 28: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Propiedades IVUso y justificación

Se puede acceder a una propiedad usandoQObject::setProperty(const char *, QVariant &) yQObject::property(const char *) sin saber nada sobrela clase excepto el nombre de la propiedad. Es preferibleusar directamente las funciones READ y WRITE, ya queson más rápidas y proporcionan mejores diagnósticos entiempo de compilación. Pero requieren conocer la claseen 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

Page 29: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

El árbol de objetos

Utilidad

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

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

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

Page 30: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

EventosQue hacer con ellos

Los eventos en Qt son objetos que derivan de la claseQEvent. A efectos prácticos típicamente para manejareventos de forma personalizada reimplementamosfunciones virtuales.

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

Page 31: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Contenido

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

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

Page 32: Introducción a Qt

Introducción Primeras pinceladas 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 barrade titulo y el icono respectivamente.El constructor de todo Widget debe aceptar uno o 2 delos argumentos siguientes:

QWidget *parent = 0: Si es 0 será una ventanaprincipal.

Qt::WindowFlags f = 0: establecer parámetrosespeciales para la ventana.

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

Page 33: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

QWidget

QWidget(e hijos) usa doble-buffer automáticamente

Es posible crear ventanas con transparencias. (enX11: solo con Kwin o Compiz)

Aparte de los estilos estándar podemos aplicar estilosusando CSS.

Funcionalidades básicas: cursores, eventos, detección depantalla completa, tooltips...

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

Page 34: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Diálogos IQDialog e hijos

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

QColorDialog QErrorMessage QFileDialogQFontDialog QInputDialog QMessageBoxQPageSetupDialog QPrintDialog QPrintPreviewDialogQProgressDialog QWizard

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

Page 35: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Diálogos IIDescripción detallada

Un dialogo es una ventana de primer nivel siempre,usada para tareas y comunicaciones breves con elusuario.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

Page 36: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Qt MainWindow FrameworkQMainWindow y amigos

Podemos entenderque QMainWindow nosproporciona un marco detrabajo, para construir unaGUI. QMainWindow tienesu propio layout al que sepuede añadir QToolBars,QDockWidgets, unQMenu, y una QStatusBar.

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

Page 37: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

QMainWindowEl widget central

El widget central

puede ser cualquier widged de Qt como QTextEdit oQGraphicsView o uno personalizado. Establecemos elwidget central 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.– 37/64

Page 38: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

QMainWindowMenús

Creación de menús

Los menús se implementan con QMenu y se mantienenorganizados en una QMenubar. Cada entrada es unaQAction. Añadimos menús con addMenu(QMenu), yacciones 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

Page 39: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

QMainWindowToolbars: barras de herramientas

Creación de toolbars

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

Ejemplo

void MainWindow: : createToolBars ( ){

fi leToolBar = addToolBar( t r ("File" ) ) ;f i leToolBar−>addAction(newAct ) ;

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

Page 40: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

QString I

Clase de manejo de texto Unicode. Almacena unacadena de QChars, siendo cada QChar de 16 bits

Usa compartición implícita de memoria, con copiaen escritura.

Dispone de funciones para convertir de y a números

Es muy recomendable manejar las listas de QStringsusando QStringList

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

Page 41: Introducción a Qt

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ónlatin-1(ISO 8859-1

toUtf8(): Convierte a UTF-8

toLocal8Bit(): A la codificación local

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

Page 42: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

QString III

Gracias al sistema de tipos de C++ y al hecho de queQString es implícitamente compartida, pueden sertratadas 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

Page 43: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Otros widgets básicos

Botones

QCheckBox, QPushButton, QRadioButton, QToolButton yQCommandLinkButton.

Texto

QLineEdit, QPlainTextEdit, QTextEdit, QTextBrowser

Otros contenedores

QMDIArea, QTabWidget, QStackedWidget

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

Page 44: Introducción a Qt

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, unwidget puede ocupar varias casillas

QFormLayout Alternativa de alto nive a QGridBoxLayoutpara layouts de 2 columnas.

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

Page 45: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Contenido

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

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

Page 46: Introducción a Qt

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 yrecomendable usar un diseñador de interfaces. Apartede eso las vemos tal cual las hacemos.

designer

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

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

Page 47: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Qt DesignerEn imágenes I

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

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

Page 48: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Qt DesignerEn imágenes II

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

Page 49: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Qt Designer

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

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

Page 50: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

qmake I

Qmake es la herramienta de generación de Makefilesoficial de Qt4.Características:

Optimizado para Qt4

Automáticamente genera reglas de compilaciónpara moc y uic.

Genera proyectos para el Visual Studio.

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

Page 51: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

qmake IIVariables I

Modificamos valores de una variable con la sintaxis:VARIABLE ± = valor SOURCES Ficheros de códigofuente 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; pordefecto el nombre del proyecto

CONFIG: opciones, merece un vistazo enprofundidad

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

Page 52: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

qmake III

RESOURCES: una lista de ficheros de recursos aincluir

TEMPLATE: la plantilla a usar para el proyectodisponemos de app, lib, subdirs(reglas parasubdirectorios), vcapp, vclib.

DEFINES: para incluir definiciones con elpreprocesador

QT: indica que componentes de Qt incluye elproyecto, por defecto core y gui

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

Page 53: Introducción a Qt

Introducción Primeras pinceladas 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.– 53/64

Page 54: Introducción a Qt

Introducción Primeras pinceladas 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.– 54/64

Page 55: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

qmakeConsejos y recordatorios

Comandos

Crear proyecto con: qmake -projectGenerar Makefiles simplemente: qmake

Trucos

Usa QMAKE_LFLAGS += -s en modo release paragenerar ejecutables más pequeños

Puedes dar opciones dependientes de plataformasimplemente poniendo el nombre de la plataformaseguido de unas llaves y las opciones entre ellas

Lee la documentación, hay para hacer 40transparencias más, aparte de funcionalidades nodocumentadas.

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

Page 56: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Qt Assistant

La aplicación

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

¿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.– 56/64

Page 57: Introducción a Qt

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

Page 58: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Contenido

4 AvanzadoProgramación Modelo-Vista

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

Page 59: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Componentes del modelo-vista

models Proporcionanuna interfaz estándarque vistas y delegadosusan para acceder a losdatos. Los datos en si no estánalmacenados en el modelo.

Views las vistas obtienen datosdel modelo y los muestran alusuario.

Delegates Obtienen datos de los usuarios.

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

Page 60: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Las Graphics view

Las Graphics View proporcionan una superficie paragestionar e interactuar con un gran número decomponentes 2D personalizados.

Como aproximación al Model-View

Es un modelo basado en componentes. Varias vistaspueden observar una misma escena y una escena puedecontener items de variados shapes geométricos.

La escena: Proporcionada por QGraphicsScene

La vista: Proporcionada por QGraphicsView

El item: proporcionado por QGraphicsItem, yQGraphicsWidget(No hereda de QWidget)

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

Page 61: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Otros puntos de interes IDentro de QtGui

Qt Style Sheets:1 hojas de estilo con una sintaxissimilar a la del CSS web.

Drag and Drop: arrastrar y soltar

La 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 deprocesos, teclados, plugins, integración con elescritorio...

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

Page 62: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

Otros puntos de interes IIGeneral

QtConcurrent, primitivas orientadas a objetos paraprogramación multihilo, así como apis de alto nivel.

Otros cosas a tener en cuenta al desarrollaraplicaciones como manejo de eventos(másgeneral), y recursos(qrc)

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

Page 63: Introducción a Qt

Introducción Primeras pinceladas 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: Introducción a Qt

Introducción Primeras pinceladas Ahora en serio Avanzado

¿Preguntas o sugerencias?

Salvador Alemany [email protected]

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