Introducción

  • Framework multiplataforma orientado a objetos
  • Interfacez gráficas
  • Software libre y de código abierto
  • Usa C++ de forma nativa
  • Bindings
    • PyQt
    • Qyoto
    • QtRuby
    • PHP-Qt

¿Quiénes usan Qt?

  • Agencia Espacial Europea
  • DreamWorks
  • Panasonic
  • Philips
  • Samsung
  • HP
  • Walt Disney Animation Studios
  • Blizzard Entertainment

Ejemplos

  • Mathematica
  • Google Earth
  • IDE RStudio
  • Spotify
  • VirtualBox
  • VLC media player
  • LyX
  • Neural Designer

Módulos de Qt Essentials

  • QtCore
  • QtGui
  • QtWidgets
  • QtD-Bus
  • QtQML
  • QtNetwork
  • QtQuick
  • QtQuickControls
  • QtQuickDialogs
  • QtQuickLayouts
  • QtQuickTest
  • QtTest
  • QApplication

    Down arrow
    Down arrow
    Down arrow
    Down arrow
    Down arrow
    Down arrow
    Down arrow
    
    					
    						exec es una palabra reservada en Python. Por lo que PyQt
    						agregó un guion bajo para diferenciarla.
    					
    				
    Down arrow
    Down arrow
    Down arrow
    Down arrow

    QMainWindow

    • Toda aplicación necesita al menos un QMainWindow, y puede tener más de uno si se necesita.
    • La aplicación termina cuando la última QMainWindow es cerrada.
    
    				
    • Una buena practica es crear sub-clases que hereden de QMainWindow
    • Esto permite que el comportamiento de la ventana sea autocontenido
    
    				

    Señales

    • Cada interacción del usuario con Qt genera un evento
    • Hay varios tipos de eventos, cada uno representa un tipo de interacción (Teclado, click, etc)
    • Los eventos se envian a un manejador específico del tipo de evento
    • Click en un widget genera un QMouseEvent que se envia al manejador .mousePressEvent del widget
    • Qt proporciona Señales que permiten "escuchar" notificaciones de eventos dentro de una aplicación
    • Se pueden enviar datos a traves de las señales
    • Los receptores de las señales se llaman Slots
    • Qt proporciona slots en sus clases, además, se pueden usar funciones de Python como slots
    
    				
    Down arrow

    Toolbar

    • Uno de los elementos más comunes en las interfaces
    • Barra de iconos o texto usados para realizar tareas comunues dentro de la aplicación
    • Las toolbars de Qt pueden mostrar iconos y texto
    
    				
    • QAction
    • Abstracto
    • QAction también tiene señales
    • Puede agregarse a toolbars y menus
    
    				
    • Agregar iconos
    Iconos
    
    							action_boton = QAction(QIcon('animal.png'),"Un boton", self)
    							...
    							#Agregar QAction a la toolbar
    							toolbar.addAction(action_boton)
    							toolbar.addSeparator()
    						
    
    				

    Menu

    • Proporcionan acceso a las funciones principales de una aplicación
    • Archivo, Abrir, Guardar, Cerrar, etc
    • Pueden anidarse para crear estructura de árbol
    • Normalmente tienen atajos del teclado para acceder a las funciones
    • QMenuBar
    
    					 Para gregar un sub-menú sólo se utiliza addMenu()
    					en el menú padre.
    					
    
    						#crear submenu
    						submenu_archivo = menu_archivo.addMenu('Sub-menu')
    						submenu_archivo.addAction(action_boton3)
    					

    Layouts

    Elementos usados en la agrupación o dispersión de elementos gráficos (Widgets) dentro de la interfaz de usuario.

    Layout Comportamiento
    QHBoxLayout Disposición lineal horizontal
    QVBoxLayout Disposición lineal vertical
    QGridLayout Disposición indexable (x,y)
    QStackedLayout Apilación una enfrente de otra
    Down arrow
    Down arrow

    Widgets

    Nombre dado a los componentes de la interfaz de usuario y con los cuales se puede interactuar.

    Down arrow
    
    				
    • Acomodar los elementos del código anterior en un layout horizontal
    • Acomodar los elementos del código anterior en un layout matricial de tamaño 3x5 sabiendo que para agregar un elemento al layout se usa el siguiente método: addWidget(elemento, fila, columna)
    Widget Lo que hace
    QCheckbox Casilla de verificación
    QComboBox Lista desplegable
    QDateEdit Edición de fechas
    QDateTimeEdit Edición de fechas
    QDial Disco rotatorio
    QDoubleSpinbox Contador de números flotantes
    Widget Lo que hace
    QFontComboBox Lista desplegable de fuentes
    QLCDNumber Despliegue de carateres en LCD
    QLabel Etiquetas sin interacción
    QLineEdit Línea de texto
    QProgressBar Barra de progreso
    QPushButton Botón
    Widget Lo que hace
    QRadioButton Botón alternador que permite la selección de sólo un elemento
    QSlider Deslizador
    QSpinBox Contador de número enteros
    QTimeEdit Edición de horas

    QLabel

    
    					

    lblEjemplo = QLabel()

    lblEjemplo.setText("Texto1")

    Flag Comportamiento
    Qt.AlignLeft Alineación a la izquierda
    Qt.AlignRight Alineación a la derecha
    Qt.AlignHCenter Alineación Horizontal central
    Qt.AlignJustify Justifica el texto
    Flag Comportamiento
    Qt.AlignTop Alineación Superior
    Qt.AlignBottom Alineación Inferior
    Qt.AlignVCenter Alineación vertical central
    Qt.AlignCenter Alineación vertical y horizontal central

    QCheckBox

    
    				
    Flag Comportamiento
    Qt.Unchecked Elemento no seleccionado
    Qt.PartiallyChecked Elemento parcialmente seleccionado
    Qt.Checked Elemento seleccionado

    QComboBox

    
    				

    QListWidget

    
    				

    QLineEdit

    
    				

    QPlainTextEdit

    
    				

    QSpinBox y QDoubleSpinBox

    
    				

    QSlider

    
    					

    sldEjemplo.QSlider(Qt.Vertical)

    sldEjemplo.QSlider(Qt.Horizontal)

    QDial

    
    				

    widget to widget

    
    				

    Interfaz Buscar

    
    				

    Calculadora

    
    				

    sender

    • Atributo de objetos QObject
    • Sender - receiver
    • Apuntador del objeto

    Calculadora versión 2

    
    				

    QDialog

    • Componentes gráficos que permiten la comunicación con el usuario
    • Abrir/Guardar archivos
    • Configuración
    • Preferencias
    • Funciones ajenas a la interfaz de usuario

    Ejercicio: Escribir el código necesario de la clase.

    
    				

    Ejercicio: Escribir el código necesario de la clase.

    
    				

    Tipos de botones

    • QDialogButtonBox.Ok
    • QDialogButtonBox.Open
    • QDialogButtonBox.Save
    • QDialogButtonBox.Cancel
    • QDialogButtonBox.Close
    • QDialogButtonBox.Discard
    • QDialogButtonBox.Apply
  • QDialogButtonBox.Reset
  • QDialogButtonBox.RestoreDefaults
  • QDialogButtonBox.Help
  • QDialogButtonBox.SaveAll
  • QDialogButtonBox.Yes
  • QDialogButtonBox.YesToAll
  • QDialogButtonBox.No
  • QDialogButtonBox.NoToAll
  • QDialogButtonBox.Abort
  • QDialogButtonBox.Retry
  • QDialogButtonBox.Ignore
  • QDialogButtonBox.NoButton
  • Down arrow

    QFileDialog

    • QFileDialog permite a los usuarios seleccionar archivos o directorios.
      • getOpenFileName
    
    					
    				

    QFontDialog

    • QFontDialog permite a los usuarios seleccionar una fuente.
      • getFont()
    
    					
    				

    QInputDialog

    • QInputDialog sirve para hacer peticiones de datos a los usuarios.
      • getText()
      • getDouble()
      • getInt()
      • getItem()
      • getMultiLineText()
    
    					
    
    items = ['Uno', 'Dos', 'Tres', 'Cuatro']
    i, ok = QInputDialog.getItem(self, "Pedir item","Selecciona uno:", items, 0, False)
    					

    QMessageBox

    • Tipo de dialogo modal
    • Comunicación con el usuario
    Icono Tipo Descripción
    Down arrow Question Hacer una pregunta
    Down arrow Información Proporciona información
    Down arrow Advertencia Errores no críticos
    Down arrow Crítico Errores críticos

    BOTONES ESTANDAR

    
    				
    
    				
    
    				

    Crear un editor de texto

    Crear un editor de texto siguiendo las sentencias y con las funcionalidades sugeridas:

    1. Crear una ventana
    2. Agregar barra de menú y barra de herramientas
    3. Agregar "espacio" para colocar un texto
    4. Funcionalidad para abrir un archivo
    5. Funcionalidad para guardar archivo
    6. Funcionalidades Copiar, cortar y pegar