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
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++, 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
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
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 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
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
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 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
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
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
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
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
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 serioExtensiones a C++Algunas clases de interésHerramientas
Salvador Alemany Garrido– Introducción a Qt.– 17/64
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
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
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 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Introducción Primeras pinceladas Ahora en serio Avanzado
Qt DesignerEn 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 deinterfaces 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 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
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
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
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
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
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
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
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 AvanzadoProgramació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 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
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
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
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
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
Introducción Primeras pinceladas Ahora en serio Avanzado
¿Preguntas o sugerencias?
Salvador Alemany [email protected]
Salvador Alemany Garrido– Introducción a Qt.– 64/64