Principais classes e conceitos básicos de Qt. Danilo Freire de Souza Santos



Documentos relacionados
Básico, Ferramentas e o Primeiro Programa em Qt

Linguagens de Programação

Orientação a Objetos Programação em C++

Rendering 2D com OpenGL e interface gráfica em Qt

MANUAL DE UTILIZAÇÃO DO PLUGIN GERADOR DE PLUGINS DO TERRAVIEW

Plugins TerraView. Última revisão: 12/12/32006 Versão TerraLib: 3.1.4

Linguagens de Programação. Parte V. História do Qt. Primeiro Exemplo. Primeiras Classes. Primeiro Exemplo. Prof. Miguel Elias Mitre Campista

Antonio Marcio A. Menezes. Outubro de 2009

Na disciplina de Cálculo Numérico, vamos trabalhar com a linguagem C++ e o compilador que vamos usar é o Dev C++.

Computação II Orientação a Objetos

UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA INFORMÁTICA APLICADA

AULA 2. Minicurso PET-EE UFRN

Introdução ao Android

Plugins TerraView. Versão TerraLib/TerraView: 3.2.0RC2. Código fonte completo da TerraLib na estrutura de diretórios sugerida no site da TerraLib 1.

Curso de Aprendizado Industrial Desenvolvedor WEB

Manual de instalação e utilização para o celular

Java 2 Standard Edition Como criar classes e objetos

Programação Web com Webdev 19 Julio Cesar Pedroso Conteúdo

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROJETO INFORMÁTICA NA ESCOLA

Programa ConsoleRPN. PUC-Rio CIV Sistemas Gráficos para Engenharia Luiz Fernando Martha & André Maués Brabo Pereira

Manual de Instalação do Agente Citsmart

Introdução ao Android SDK. Prof. Me. Hélio Esperidião

Organização de programas em Python. Vanessa Braganholo

Universidade Federal do Pará Centro de Tecnologia da Informação e Comunicação Grupo de Trabalho SET. Tutorial PyQT4

1. Apresentação Objetivos

Configurando um Grupo Doméstico e Compartilhando arquivos no Windows 7

Programação de Computadores I. Conhecendo a IDE Code::Blocks

Programação científica C++

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Minicurso introdutório de desenvolvimento para dispositivos Android. Cristiano Costa

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

Algoritmos e Programação Estruturada

Ambiente de Desenvolvimento

SISTEMAS OPERACIONAIS LIVRES. Professor Carlos Muniz

QTestLib framework: Criando unit tests inteligentes para projetos baseados em Qt. Bruno Abinader 22 de Julho de 2010

Componentes da linguagem C++

02 - Usando o SiteMaster - Informações importantes

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

Display de Cristal Líquido

DEPARTAMENTO DE ENGENHARIA INFORMÁTICA FACULDADE DE CIÊNCIAS E TECNOLOGIA DA UNIVERSIDADE DE COIMBRA

Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT. Power Point. Básico

Tipos de Dados, Tipos Abstratos de Dados Estruturas de Dados

Introdução ao Tableau Server 7.0

DNS DOMAIN NAME SERVER

Instalação do Simulador e execução da partida

( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO DISPOSITIVOS MOVEIS ANDROID STUDIO

CERTIFICADO DIGITAL CONECTIVIDADE DIGITAL ICP GUIA PLANCON DE INSTRUÇÕES PARA INSTALAR SEU TOKEN, PENDRIVE OU LEITOR DE CARTÕES

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Capítulo 2. Laboratório 2.1. Introdução ao Packet Tracer, Roteadores, Switches e Inicialização

Tutorial: Aprenda a criar seu próprio makefile. Darcamo (Forúns Ubuntu)

Computação II Orientação a Objetos

3.1) Baixe os arquivos necessários para preparação neste link:

Vamos criar uma nova Página chamada Serviços. Clique em Adicionar Nova.

Configuração do KDevelop

Lidar com números e estatísticas não é fácil. Reunir esses números numa apresentação pode ser ainda mais complicado.

É altamente recomendável testar as conexões usando o programa PING (será visto posteriormente).

O Primeiro Programa em Visual Studio.net

Desenvolvimento de Aplicativos com ASR para Android

App Inventor. uma breve introdução. Rui Campos. Mestrado em Eng. Computação e Instrumentação Médica. Sistemas de Computação Móvel

MANUAL DO USUÁRIO. Software de Imagem via Celular (isic) baseado no sistema operacional Symbian

Laboratório de Computação VI JAVA IDL. Fabricio Aparecido Breve

Introdução a POO. Introdução a Linguagem C++ e POO

Microsoft Access: Criar relatórios para um novo banco de dados. Vitor Valerio de Souza Campos

Área de Trabalho. Encontramos: Ìcones Botão Iniciar Barra de Tarefas

Este tutorial mostra como utilizar as ferramentas Send Mail e Web Commands.

Uma nota de importação é uma nota fiscal de entrada emitida em cada operação onde houver a aquisição de mercadorias em outros países.

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI FORMULÁRIO COM ABAS E BUSCAS DE REGISTROS

Programação para Android. Aula 07: Persistência de dados Shared Preferences, Internal e External Storage

TUTORIAL: APRENDENDO A LIDAR COM O AXURE PRO

Desenvolvimento com Android Studio Aula 01 Instalação e Configuração do Ambiente de Desenvolvimento, Estrutura de um projeto Android

Programa de Gestão de Conteúdo

Programação para Android. Aula 05: Estilos e temas; galeria de imagens

Manual de Instalação e Operação do CondorUpload

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Criando uma System Call no Minix

Guia e Utilização do Visual Studio 6.0

Barra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas

CAPÍTULO 7 NÍVEL DE LINGUAGEM DE MONTAGEM

Noções de. Microsoft SQL Server. Microsoft SQL Server

A Linguagem Pascal e o Ambiente de Programação Dev-Pascal. Introdução à Ciência da Computação I

Fundamentos de Programação II. Introdução à linguagem de programação C++

INTRODUÇÃO À PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS. ADS 6º Período

Windows. Atualizar o firmware para unidades de comunicações UT-1. Prepare-se

Profº. Enrique Pimentel Leite de Oliveira

Atualização do seu computador com Windows 8 da Philco para o Windows 8.1

ADMINISTRAÇÃO DE SISTEMAS OPERACIONAIS SERVIÇOS DE ACESSO REMOTO (TELNET E TERMINAL SERVICES) Professor Carlos Muniz

Introdução à Programação

MANUAL DO USUÁRIO. para tv TV101

Disciplina: INF Programação I. 1 a aula prática Introdução ao ambiente do Microsoft Visual Studio 2010

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR $,'(GR5HSRUW0DQDJHU

Tutorial de Integração PHP

Linguagem de Programação I

Orientação a Objetos

Transcrição:

Começandoa programarcom Qt Principais classes e conceitos básicos de Qt Danilo Freire de Souza Santos

Roteiro Hello World Projetos em Qt Signals e Slots Modelo de Objetos

Hello World Começando do zero #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); QLabel hello("hello World"); hello.show(); //hello.showmaximized(); return a.exec(); }

Explorando o Hello World #include <QApplication> #include <QLabel> int main(int argc, char *argv[]) { QApplication a(argc, argv); QLabel hello("hello World"); hello.show(); //hello.showmaximized(); return a.exec(); } includes QApplication Label com a string Mostre o Label Execute a aplicação

Arquivos de Projeto Arquivo.pro Arquivo com definições do projeto Define variáveis para o compilador Arquivos fontes, includes, dependências, etc Oferecetemplates app: cria um makefile para aplicações lib: cria um makefile para bibliotecas Define escopos Uma definição para Symbian, outra para Desktop, outra para Maemo QT += core gui TARGET = mymainwindow CONFIG += console TEMPLATE = app SOURCES += main.cpp \ mymainwindow.cpp HEADERS += \ mymainwindow.h symbian { TARGET.UID3 = 0xE515E66B vendorinfo = \ "%{\"Nokia\"}" \ ":\"Nokia\"" my_deployment.pkg_prerules = vendorinfo DEPLOYMENT += my_deployment }

qmake e build qmake é o pré-compilador do Qt Gera os arquivos makefile para o compilador C++ Gera outrosarquivosfontes(meta-object) Utiliza como base o arquivo de projeto.pro /> qmake Depoisde executaro qmake, chameo make /> make Não se preocupem, o QtCreator gerencia isso para você!

Executando no Qt Creator Usando o Qt Simulator Sigam as instruções do Professor!

ExecutandoemSymbian(no aparelho) Pré-requisitos Instalar o Nokia Ovi Suite no Computador Instalar o Nokia TRK no Celular Pacotede instalaçãono Qt SDK Conecte o aparelho via USB Mude o target de compilação para Symbian Siga instruções do professor! Observe se o Qt Creator identificou o aparelho Run!

Explorando o projeto Symbian Arquivos de compilação Symbian são criados automaticamente pelo Qt SDK (qmake, etc ) São gerados: Arquivos pkg para geração de instaladores Arquivos mmp, que são os arquivos makefile do symbian Arquivos de recursos, etc Sigam as instruções do professor

Organizando em Layouts Incrementando o Hello World: #include <QApplication> #include <QPushButton> #include <QVBoxLayout> #include <QSpinBox> #include <QSlider> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget window; QVBoxLayout* layout = new QVBoxLayout(&window); QSpinBox* spinbox = new QSpinBox(); QSlider* slider = new QSlider(Qt::Horizontal); QPushButton hello = new QPushButton("Hello World"); layout->addwidget(spinbox); layout->addwidget(slider); layout->addwidget(hello); window.showfullscreen(); return a.exec(); } Dividindo a tela em um layout vertical Criando novos elementos que derivam de QWidget Adicionando os widgets no layout

QHBoxLayout: Layout Horizontal QVBoxLayout: Layout Vertical QGridLayout: Grade QFormLayout: Layouts mais comuns Associa widgets de input e labels Form 1:

Criando Conexões Vamos adicionar funcionalidade a aplicação. Caso de uso: A aplicação está em Fullscreen(), precisamos sair dela. Como faz? Usar Signals e Slots: QObject::connect(hello, SIGNAL(clicked()), &a, SLOT( quit() ) ) ; Interpretando: Quando o botão hello for clicado, o QApplication a irá sair.

Callbacks X Signals & Slots Callbacks Geralmente são ponteiros para funções São pouco flexíveis As funções devem ser casadas em tempo de compilação Não garantem a segurança de tipo (*void) Signals & Slots Separação: Signal: Emitido para lançar um evento Slot: Uma função que pode ser ligada em um signal, ou seja, a ação para um evento Garantem a conexão entre tipos (type-safe) Vários objetos Qtjá oferecem seus Signals e Slots 13

Conexões Objeto 1 Signal 1 Signal 2 Slot 1 Slot 2 Slot 3 Objeto 2 Signal 1 Signal 2 Slot 1 Slot 2 Slot 3 Objeto 3 Signal 1 Signal 2 Slot 1 Slot 2 Slot 3

Múltiplas Conexões Objeto 1 Signal 1 Signal 2 Slot 1 Slot 2 Slot 3 Signal 2 executa dois SLOTs Objeto 2 Signal 1 Signal 2 Slot 1 Slot 2 Slot 3 Objeto 3 Signal 1 Signal 2 Slot 1 Slot 2 Slot 3

Exemplo múltiplasconexões #include <QApplication> #include <QPushButton> #include <QVBoxLayout> #include <QSpinBox> #include <QSlider> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget window; QVBoxLayout* layout = new QVBoxLayout(&window); QSpinBox* spinbox = new QSpinBox(); QSlider* slider = new QSlider(Qt::Horizontal); QPushButton hello = new QPushButton("Hello World"); layout->addwidget(spinbox); layout->addwidget(slider); layout->addwidget(hello); window.showfullscreen(); QObject::connect( hello, SIGNAL( clicked() ) ), &a, SLOT( aboutqt() ) ); QObject::connect( hello, SIGNAL( clicked() ) ), &window, SLOT( showmaximized() ) ); return a.exec(); } 16

Parâmetros em Signals É possível transmitir parâmetros em sinais QObject::connect( spinbox, SIGNAL( valuechanged(int) ), slider, SLOT( setvalue(int) ) ); O tipodo parâmetrodo signal deve casar com o do slot Se nãoexistirum Signal compatívelcom o SLOT, nãoocorrerá erro de Compilação! Entretanto, um warning em tempo de execução aparecerá. Porque é type-safe? Semconexãose ostiposnãocasaremouse o signal ouslot não existir O método connect() retorna um boolean indicando o sucesso

Exemplo ParâmetroemSignals #include <QApplication> #include <QPushButton> #include <QVBoxLayout> #include <QSpinBox> #include <QSlider> int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget window; QVBoxLayout* layout = new QVBoxLayout(&window); QSpinBox* spinbox = new QSpinBox(); QSlider* slider = new QSlider(Qt::Horizontal); QPushButton hello = new QPushButton("Hello World"); layout->addwidget(spinbox); layout->addwidget(slider); layout->addwidget(hello); window.showfullscreen(); QObject::connect( spinbox, SIGNAL( valuechanged(int) ), slider, SLOT( setvalue(int) ) ); return a.exec(); }

Exercício 2 Tomem como base o último exemplo! Crieum widget com um slider e um spinbox. Quandoo slider alteraro valor, alteremo valor no spinbox, e vice e versa.

Qt Object Model QtObjectextendeas funcionalidadesde Classes C++ Adiciona mais flexibilidade e preserva a eficiência de C++ Gerenciamento de Memória Signals e Slots Propriedades e meta-information Introspecção em C++

QObject Principal classe de Qt Necessária para fazer uso de meta-information #include <QObject> class MyClass: public QObject { Q_OBJECT... }; moc Meta-Object Compiler Interpreta QObjects e extende o código fonte com funções extras Remove palavraschavesde Qt (signals, slot, emit), e geraum código fonte C++ padrão Funciona com qualquer compilador padrão

Mais Signals e Slots Tipos de conexão: Direta: Conexão padrão, o Slot é executado imediatamente depois do Signal Queued: O Slot é executadoposteriormente(navoltado event loop de execuçãode Qt) Implementação Signals: Gerados automaticamente pelo moc Definamno.h (nuncano.cpp). Não retorna valor Slots: Podem ser virtuais, nunca estáticos Oferecem um pouco mais de sobrecarga em relação a um método normal

ImplementandoseusSignals e Slots Criar um QObject Contador com: 1 SLOT: funçãoqueatribuium valor a umavariável 1 SIGNAL: sinalqueé emitidoquandoa variávelé alterada Crie um QPushButton Conecte o signal clicked() ao SLOT do contador Crie um Qlabel Conecte o Signal de Contador ao SLOT setnum() do Qlabel Incluam todos os objetos em uma aplicação.

Meta-Object Compiler Geraçãodos arquivosmoc_... O queo mocnosoferece: Signals and Slots metaobject(): retorna o meta-object para a classe QMetaObject::className(): retornao nomedaclasseemtempo de execução inherits(): checa a instância atual herda de outra classe tr(): traduz strings setproperty() e property(): acessae atribuivaloresa propriedades dinamicamente Mecanismos mais seguros para casting: qobject_cast<>

Gerenciamento de Memória QObject implementa uma hierarquia pai-filho Aocriarum QObjectcom a referênciado pai, o paiadicionao objetoa sualistade filhos Quando o pai for deletado, todos os filhos são deletados automaticamente Se o filhofor deletado, eleé removidodalistado pai automaticamente CUIDADO: Apenassãogerenciadosobjetoscriadoscom a referênciado pai! Em relação aos widgets Os widgets filhossãoexibidosdentrodaáreado widget pai.

Exemplo QWidget* win = new QWidget(); QVBoxLayout* layout = new QVBoxLayout(win); QPushButton* botao = new QPushButton("Label"); layout->addwidget(botao); win->show(); QPushButton é filho de quem? QWidget* win = new QWidget(); QVBoxLayout* layout = new QVBoxLayout(win); QPushButton* but = new QPushButton("Label"); layout->addwidget(but); win->show(); win->dumpobjecttree();