Inicio agora uma série de artigos sobre como programar em Qt.
O que é a Qt ?
A Qt (lê-se cute – igual a fofo mesmo) é uma biblioteca para desenvolvimento de aplicações.
Está contida nela a biblioteca e uma IDE, o qtcreator. É uma ótima IDE, mas não é obrigatória.
Ao invés de começar usando o QtCreator, vamos fazer um projeto simples na mão para que se entenda como tudo funciona por baixo dos panos – E isso é muito importante.
Dependências
1. lib Qt instalada e no path
2. g++ (build essential no ubuntu – em outras distros pode variar o nome) e make instalado.
Arquitetura básica
Um projeto em Qt, tem a seguinte arquitetura:
1. pro file – Arquivo de projeto
2. source + headers files – Arquivos fontes
3. arquivos gerados automágicamente
Nós vamos usar o qmake (gerador padrão de makefiles da Qt) para criar o projeto.
Inicialmente, vamos criar um arquivo main.cpp, colocando dentro o conteúdo:
#include <QtGui> int main(int argc, char *argv[]) { QApplication app(argc, argv); QString s="Teste de aplicação do Thiago"; QMessageBox::information(NULL, "AVISO", s); //Mostra uma mensagem na tela. return 0; }
Tendo o arquivo main.cpp criado, vamos criar o projeto.
No shell, dentro do diretório aonde está o main.cpp, vamos executar
$ qmake -project
o qmake, com esse parâmetro, irá criar um arquivo “.pro”. No meu caso, estou dentro do diretório TesteQt, será criado o arquivo TesteQt.pro
###################################################################### # Automatically generated by qmake (2.01a) sex 15. jan 16:09:32 2010 ###################################################################### TEMPLATE = app TARGET = DEPENDPATH += . INCLUDEPATH += . # Input HEADERS += SOURCES += main.cpp
Repare, que esse não é um makefile.
Agora, para compilar, faça no mesmo diretório
qmake
make
Rode o programa e veja o resultado.
O que acontece por baixo dos panos ?
O qmake, gera os makefiles.
O make gera os arquivos moc_* e compila a todos.
O responsável pela geração dos arquivos moc_* é o programa moc.
Ele faz a leitura das macros dos arquivos .cpp e .h
Vamos agora, incluir uma janela no nosso programinha.
crie os arquivos Teste.h e Teste.cpp e inclua os conteúdos
Teste.h
#pragma once #include <QWidget> class Teste : public QWidget { Q_OBJECT public: explicit Teste(QWidget *parent = 0); signals: public slots: void sairEvent(); };
Teste.cpp
#include "Teste.h" #include <QtGui> Teste::Teste(QWidget *parent) : QWidget(parent) { //Vamos criar o layout do widget this->setLayout( new QVBoxLayout() ); //Cria-se agora um botao QPushButton *btn = new QPushButton(this); btn->setText("Clique para sair"); //Adiciona o botao no layout criado this->layout()->addWidget(btn); //Conecta o sinal clicked do botao recem criado no metodo sairEvent connect(btn, SIGNAL(clicked()), this, SLOT(sairEvent())); } void Teste::sairEvent() { //Fecha este widget this->close(); }
main.cpp
#include <QtGui> #include "Teste.h" int main(int argc, char *argv[]) { QApplication app(argc, argv); //Cria classe e manda exibir janela Teste teste; teste.show(); return app.exec(); }
Ao executar, veja que foi criada uma janela com um botão no meio, e ao clicar nele, o widget será fechado e o programa terminado.
Podemos ver neste programinha
- Por padrão, quando todas as janelas de um programa qt são fechadas, o programa é terminado.
- Layouts: Vamos comentar sobre eles em um próximo artigo.
- connect: Usado para conectar eventos de tela (qualquer objeto do tipo QObject na verdade) com o código fonte.
- Signals e Slots: o evento conectado no exemplo acima, é um signal clicked, gerado pelo botão, e está conectado no slot sairEvent, instanciado na classe. Esses são métodos especiais usados para intercâmbio entre classes.
- Q_OBJECT: Macro usada para que o moc preprocessador crie automaticamente métodos e outras coisas necessárias para que a classe tenha todas as propriedades do QObject (meta-classe)
- Sobre os pontos acima citados, serão explanados em outros artigos.
Após conseguir rodar este programa, sugestões para os próximos passos enquanto eu não escrevo o próximo artigo:
– Baixe a qt-sdk + qtcreator do site http://qt.nokia.com/
– Abra o QtCreator e comece a desenvolver seus programas por lá. (O QtCreator tem auto-complete dentre outras coisas muito interessantes).
– Leia a documentação extensa e excelente feita pelo pessoal da nokia/trolltech.
E agora, happy programming e é hora de fuçar e aprender!
Problem temporarily solevd. It works if I define the constructors within the scope of the public. public: fourSided() { this -> x = 0; this -> y = 0; this -> width = 0; this -> height = 0; this -> color = BLACK; this -> point = Point( x, y ); this -> rect = Rect( point, width, height, color ); } fourSided( int& X, int& Y, int& WIDTH, int& HEIGHT, Color& COLOR ) { this -> x = X, this -> y = Y, this -> width = WIDTH; this -> height = HEIGHT; this -> color = COLOR; this -> point = Point ( this -> x, this -> y ); this -> rect = Rect( point, this -> width, this -> height, this -> color ); }