Blogaro!

Iniciando com Qt

Created by Thiago Guedes on 2010-01-19 06:40:00

Tags: #c++   #programação   #qt  

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

  1. Por padrão, quando todas as janelas de um programa qt são fechadas, o programa é terminado.
  2. Layouts: Vamos comentar sobre eles em um próximo artigo.
  3. connect: Usado para conectar eventos de tela (qualquer objeto do tipo QObject na verdade) com o código fonte.
  4. 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.
  5. 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)
  6. 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!