Qt Model/View Programming – exemplo elementar

A partir da versão 4, o Qt passou a disponibilizar um conjunto de classes (vistas/views) que, baseando-se na Arquitectura Modelo/Vista (Model/View Architecture), possibilitam a fácil manipulação dos dados, bem como a forma como estes são apresentados ao utilizador.


A base teórica em que assenta esta arquitectura é a MVC ( model–view–controller ), popularizada pela linguagem Smalltalk.
No caso do Qt, o papel desempenhado pelo controller é substituído por uma forma diferente de abstracção, o delegate.
Não pretendo com este texto reinventar a roda, mas apenas dar a conhecer esta importante funcionalidade do Qt, com infinitas aplicações, e capaz de poupar muitas linhas de código comparativamente com abordagens mais tradicionais.
Está tudo explicado aqui e noutras páginas relacionadas: http://qt.nokia.com/doc/4.6/model-view-introduction.html
Por fim partilho um pequeno exemplo que escrevi, que podem espreitar aqui.
Este consiste basicamente em dois dialogs com os quais é possível gerir a informação armazenada em duas tabelas relacionadas, cujo modelo é representado na figura seguinte:

Os interfaces com o utilizador, associados a cada um dos modelos, são os seguintes:

Notas importantes que ajudam a compreender melhor este exemplo:

  1. a tabela “Cidadao” contém informação sobre pessoas, destacando-se o campo “localidade”, utilizado como “chave estrangeira” e, como tal, a fazer a ligação com a tabela “Localidade”, por intermédio do seu campo chave “idLocalidade”;
  2. no código apresentado “vistaCidadao” e “modeloCidadao” representam respectivamente os objectos utilizados, no âmbito da arquitectura modelo/vista, a vista utilizada para interagir com o utilizador e o modelo subjacente.
  3. de forma semelhante os mesmos princípios são utilizados para a tabela “Localidade”, sendo os nomes dos objectos utilizados neste caso “vistaLocalidade” e “modeloLocalidade”;
  4. a grande diferença entre os objectos “modeloLocalidade” e “modeloCidadao”, resulta do facto de terem sido instanciados respectivamente a partir das classes QSqlTableModelQSqlRelationalTableModel;
  5. o motor utilizado no exemplo é o InnoDB(http://dev.mysql.com/doc/refman/5.0/en/innodb.html), com todas as especificidades que lhe estão associadas, particularmente no que diz respeito à utilização de “constraints” associadas à “foreign key” (http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html);
  6. quando a aplicação é executada é sempre inserido um registo na tabela “Localidade”, correspondente a uma localidade de código 9999, que representa uma “localidade desconhecida”, uma vez que, tal como se pode observar no Diagrama E-R, a relação é de participação obrigatória;
  7. para a criação da base de dados disponibilizo duas possibilidades, sendo a primeira o script “script.sql”, e a segunda o ficheiro “mva1.mwb”, que pode ser aberto com o MySQL Workbench e utilizado para criar a base de dados;
  8. a relação existente entre as duas tabelas é do tipo “non-identifying”;
  9. a aplicação faz o teste para verificar se a chave é duplicada pelo simples facto de poder enviar uma mensagem ao utilizador e processar essa situação de forma específica;
  10. no main.cpp, “createConnection(“localhost”, “mva1″, “qtuser”, “123″)” significa que o servidor mysql está a correr em localhost, a base de dados chama-se mva1, o utilizador é o qtuser e a respectiva palavra-passe é 123;
  11. não me ocorre mais nada … continua nos comentários ao artigo ;)

Bom proveito … porque este exemplo deu-me uma trabalheira :))))

GANTT Project

A necessidade, em primeira mão, seguida pela curiosidade, conduziu-me até esta aplicação.

Como o próprio nome indica, este programa permite elaborar um “Mapa de Gant” de forma bastante rápida e é muito intuitivo. A “Rede de PERT” também se obtém automaticamente a partir de um mapa pré-elaborado.

O facto de ser uma ferramenta simultaneamente multiplataforma e opensource torna-a bastante atractiva para ser utilizada em contexto académico, no qual as Escolas Públicas deviam dar o exemplo.

Windows 7 sins

Encontrei este link interessante, enquanto consultava o blog de O Vigia.

Para ler e reflectir.

MySQL Workbench

O que é?
“MySQL Workbench is a cross-platform, visual database design tool developed by MySQL. It is the highly anticipated successor application of the DBDesigner4 project. MySQL Workbench will be available as a native GUI tool on Window, Linux and OS X.”
http://wb.mysql.com/?page_id=6

Pode ser instalado via apt?
Infelizmente ainda não!

Como se instala em Debian “Lenny”?
#1 – Instação prévia de alguns pacotes
apt-get install liblua5.1-0 libzip1 libmysqlclient15off

#2 – Baixar o binário .deb
Abrir a página http://dev.mysql.com/downloads/workbench/
Seleccionar a plataforma Ubuntu Linux
Seleccionar o binário adequado, que no meu caso é  o “Ubuntu Linux 8.04 (x86, 32-bit)”
Verificar se o ficheiro obtido se designa mysql-workbench-oss-5.1.18a-1ubu804-i386.deb

#3 – Instalar o mysql-workbench-oss
dpkg -i mysql-workbench-oss-5.1.18a-1ubu804-i386.deb

#4 – Verificar a instalação
Procurar a aplicação no menu Aplicações > Desenvolvimento

Que motivação?
Diagramas E-R, ferramentas CASE, Sistemas de Gestão de Bases de Dados, MySQL , são apenas uma pequena amostra dos termos com que qualquer iniciado nestas andanças dos Sistemas de Informação acabam por se deparar mais cedo ou mais tarde.
No meu caso, e como estou focado na utilização efectiva de “Software Livre” na sala de aula, aproveitei alguma acalmia em termos de actividade profissional ( a minha profissão é, actualmente,  predominantemente burocrática e parca em tempo para a investigação?!) para procurar novas ferramentas que se adeqúem ao trabalho que pretendo desenvolver.
Esta pesquisa realizou-se focando o objectivo de encontrar uma ferramenta gráfica que me permitisse construir um modelo de uma Base de Dados Relacional, ou seja, o respectivo Diagrama E-R.
Considero que esta ferramenta é ideal para fazer a ligação entre a Teoria e a Prática. Digo isto porque podemos elaborar um Diagrama E-R, fazer a Normalização das Tabelas e, de seguida, representar graficamente o modelo. A partir deste ponto, e recorrendo a uma opção designada de “Forward Engineer…”, podemos criar no servidor MySQL a base de dados correspondente ao nosso modelo.
Também é possível fazer o inverso, ou seja, “Reverse Engineer…”. Neste caso é possível obter uma representação gráfica de uma base de dados já existente.
Para complementar as duas operações anteriores existe outra opção – “Synchronize Model …” – que me permite fazer reflectir as alterações realizadas sobre o modelo na base de dados, e vice-versa.
Nunca escrevi uma aplicação de dimensões sequer médias, e corro até o risco de “estar a falar de cor”, mas esta é, com certeza, uma ferramenta essencial ao desenvolvimento de Sistemas de Informação que pode poupar muito trabalho.

Para os utilizadores de MySQL, esta será certamente uma excelente “bancada de trabalho”!

“earth song” dedicada ao COP15

Como provavelmente vai ficar tudo na mesma depois de …

… vamos recordar uma música de 1996, com uma mensagem cada vez mais actual.

Fica então a sugestão para ouvirem a “earth song” de Michael Jackson.

creative commons

x

“With Creative Commons, the act of creation becomes not the end, but the beginning of a creative process that links complete strangers together in collaboration.”

— Jonathan Coulton
Musician

http://pt.wikipedia.org/wiki/Creative_commons

http://en.wikipedia.org/wiki/Creative_Commons

Publicado em outras. Leave a Comment »

Ainda se lembra do espírito do Natal?

Qt 4.6 & Qt Creator 1.3 Out Now!

Bem … esta malta trabalha bem e depressa!

Aqui fica um link para as últimas versões: link

Para recordar …

… com saudade!

Publicado em vídeo. Leave a Comment »

GNU e a Virtualização

“What’s GNU in Virtualization”

Este é o título de um artigo publicado na Linux Magazine, que resume as principais opções para aqueles que pretendam “Virtualizar”.

Deixo-vos com esta sugestão de leitura: http://www.linux-mag.com/id/7614

Publicado em linux. Leave a Comment »