Posts Tagged qt
Como tomar três rasteiras pra fazer um sinal/slot no Qt Designer
Publicado por Marcelo Barros em Programação, Qt em abril 21, 2009
Bom, eu não sabia nada de Qt. E não tinha lido nenhum livro. Mas ao ler tutorial Signal and Slots da documentação, me senti confiante pra usá-lo no meu primeiro projeto. Só quero contar alguns cuidados adicionais caso pretenda fazer o mesmo mas usando tipos personalizados para os seus sinais e esteja no meu nível de (des)conhecimento do Qt.
- A primeira rasteira está quase toda escrita no documento citado. Você precisa avisar que sua classe é especial, isto é, tem lógica de sinais e slots. Isto é feito através da macro Q_OBJECT, que deve ser colocada dentro da sua classe e através da herança de QObject. O que não está muito claro pra quem não tem experiência com Qt ou QtDesign é que você precisa garantir que seu .h está listado dentro do arquivo de projeto (com .pro no final) na diretiva HEADERS e que é necessária uma chamada explícita de “run qmake” no menu para processar as palavras chaves adicionais do Qt (eu imaginei que o QtDesigner fazia isto pra mim, “Santa ingenuidade, Batman !”). Eu fiquei na dúvida se é necessário um “rebuild all” depois, fiquei com a impressão que sim, mas não sei afirmar ainda com certeza. Comentários para os leigos como eu são bem vindos.
- A segunda rasteira foi em achar que eu poderia usar um método com o formato “on_nome_do_metodo” para os meus slots, como os elementos da interface gráfica fazem. Segundo o pessoal do fórum QtCentre, não pode. Bom, com on_ não compilava.
- A terceira rasteira eu tomei ao usar tipos personalizados nos sinais. Ok, isto nem é recomendado pois diminui o reuso do sinal. Mas eu precisava que fosse assim. Desta vez, a mensagem foi mais clara para um iniciante, algo como “Make sure <sua classe> is registered using qRegisterMetaType“. O mecanismo de sinais/slot é sofisticado e tem checagem dinâmica de tipos e fila, mas os tipos precisam ter sido registrados antes. No meu caso, era uma estrutura e era necessário a chamada de Q_DECLARE_METATYPE(nome_da_estrutura) dentro do .h e depois, antes de qualquer uso do sinal, qRegisterMetaType<nome_da_estrutura>(“nome desejado para o tipo”) dentro de algum .cpp.
Finalmente o connect funcionou e o sinal foi corretamente emitido. Não se esqueça que um signal é apenas declarado no .h, não crie o método no .cpp. Isto está na documentação e, obviamente, eu só fui ver na segunda leitura. Logo, não foi uma rasteira, foi mais uma “bobeira”, das várias cometidas.
E não esqueça também dos .h relacionados, como #include <QMetaType> para as macros de tipo personalizado e #include <QObject> para os sinais e slots (não, isto eu não esqueci!).
No mais, continuo adorando o Qt/QtDesigner. Tenho gostado muito como os projetistas criaram os objetos, seus métodos e formas de uso. Até esqueci que várias palavras chaves foram adicionadas ao C++, como signal, slot, foreach, emit .. A documentação é boa e ajuda bem (olhe apenas a da versão que estiver usando, tomei outras rasteiras por achar que era tudo igual).
Além disso, como meus objetivos com Qt saem do PC e vão para o S60 e, em breve, para o PyQt for S60, não tem nada melhor pra aprender agora !

Maemo já, Symbian em breve e QT LGPL
Publicado por Marcelo Barros em /dev/null, Open Source em janeiro 15, 2009
E, com certeza, a melhor notícia (tecnológica) do dia foi a Nokia liberando o QT como LGPL (2.1) ! Amplamente divulgada, esta notícia aproxima a Nokia ainda mais da comunidade de software livre e parece carregar promessas de interfaces Linux+QT em smartphones e tablets num futuro muito mais próximo do que eu imaginava. Também coloca em pé de igualdade o GTK+ e o KDE QT , já que antes somente o GTK+ tinha a possibilidade de ser usado como LGPL.
Vale lembrar que existem promessas de abertura do Symbian e que o projeto Maemo, que roda em tablets como o N800 e N810, já é open source.
Depois sou fanboy da Nokia e o pessoal me critica
http://www.qtsoftware.com/about/news/lgpl-license-option-added-to-qt
http://labs.trolltech.com/blogs/2009/01/14/nokia-to-license-qt-under-lgpl/
Comentários