introduccion qt
DESCRIPTION
Guia rapida de programación en c++ con Qt4TRANSCRIPT
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
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
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
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
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
Introducción ¡Hola mundo! Ahora en serio Avanzado
Qt como framework y herramientas
Salvador Alemany Garrido– Introducción a Qt.– 6/64
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
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
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
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
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
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
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
Introducción ¡Hola mundo! Ahora en serio Avanzado
Hola mundo
Salvador Alemany Garrido– Introducción a Qt.– 14/64
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
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
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
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
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
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
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
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
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
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
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
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
Introducción ¡Hola mundo! Ahora en serio Avanzado
El árbol de objetos
Salvador Alemany Garrido– Introducción a Qt.– 27/64
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Introducción ¡Hola mundo! Ahora en serio Avanzado
Qt DesignerEn imágenes II
Salvador Alemany Garrido– Introducción a Qt.– 47/64
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
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
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
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
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
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
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
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
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
Introducción ¡Hola mundo! Ahora en serio Avanzado
Contenido
4 AvanzadoProgramación Modelo-Vista
Salvador Alemany Garrido– Introducción a Qt.– 57/64
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
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
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
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
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
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
Introducción ¡Hola mundo! Ahora en serio Avanzado
¿Preguntas o sugerencias?
Salvador Alemany [email protected]
Salvador Alemany Garrido– Introducción a Qt.– 64/64