Depois de ter decidido aprender a utilizar o [cute four] escrevi o típico “Hello World!”.
Como este é extremamente simples, vou utilizar um exemplo um nadinha mais complexo às custas do qual, aqui entre nós, cheguei a “fazer cenas tristes” por não estar a perceber o motivo pelo qual o botão “reset” não funcionava :)
Esta é uma aplicação muito simples que permite definir três valores compreendidos entre 0 e 255.
O seu funcionamento é intuitivo e é composto por três ficheiro:
- main.cpp
- mainwindow.cpp
- mainwindow
main.cpp
#include <QApplication>
#include "mainwindow.h"
int main ( int argc, char *argv [] ){
QApplication app ( argc, argv );
MainWindow *janela = new MainWindow;
janela->setWindowTitle ("Modelo RGB!");
janela->show();
return app.exec();
}
mainwindow.cpp
#include <QtGui>
#include "mainwindow.h"
MainWindow::MainWindow (QWidget *parent):QWidget(parent){
//objects
botaoReset = new QPushButton("Reset");
botaoSair = new QPushButton("Sair");
textoRed = new QLabel("Red");
textoGreen = new QLabel("Green");
textoBlue = new QLabel("Blue");
spinBoxRed = new QSpinBox;
spinBoxGreen= new QSpinBox;
spinBoxBlue = new QSpinBox;
//properties
spinBoxRed->setRange(0, 255);
spinBoxGreen->setRange (0, 255);
spinBoxBlue->setRange (0, 255);
sliderRed = new QSlider(Qt::Horizontal);
sliderGreen = new QSlider(Qt::Horizontal);
sliderBlue = new QSlider(Qt::Horizontal);
sliderRed->setRange(0, 255);
sliderGreen->setRange(0, 255);
sliderBlue->setRange(0, 255);
// Signals and slots :
connect ( spinBoxRed, SIGNAL(valueChanged( int)), sliderRed, SLOT(setValue (int)));
connect ( sliderRed, SIGNAL(valueChanged( int)), spinBoxRed, SLOT(setValue (int)));
connect ( spinBoxGreen, SIGNAL(valueChanged(int )), sliderGreen, SLOT(setValue (int)));
connect ( sliderGreen, SIGNAL(valueChanged(int)), spinBoxGreen, SLOT(setValue (int)));
connect ( spinBoxBlue, SIGNAL(valueChanged(int)), sliderBlue, SLOT(setValue (int)));
connect ( sliderBlue, SIGNAL(valueChanged( int)), spinBoxBlue, SLOT(setValue (int )));
connect ( botaoSair, SIGNAL(clicked()), this, SLOT(close ()));
connect ( botaoReset, SIGNAL(clicked()), this, SLOT(resetSliders()));
// Layouts :
QGridLayout *layoutCores = new QGridLayout;
layoutCores->addWidget(textoRed, 0, 0, 1, 1);
layoutCores->addWidget(spinBoxRed, 0, 1, 1,1);
layoutCores->addWidget(sliderRed,0, 2, 1, 1);
layoutCores->addWidget(textoGreen, 1, 0, 1, 1);
layoutCores->addWidget(spinBoxGreen, 1, 1, 1, 1);
layoutCores->addWidget(sliderGreen, 1, 2, 1, 1);
layoutCores->addWidget(textoBlue,2, 0, 1, 1 );
layoutCores->addWidget(spinBoxBlue, 2, 1, 1, 1);
layoutCores->addWidget(sliderBlue, 2, 2, 1, 1);
QHBoxLayout *layoutControlo = new QHBoxLayout;
layoutControlo->addWidget(botaoReset);
layoutControlo->addWidget(botaoSair);
QVBoxLayout *layoutJanela = new QVBoxLayout;
layoutJanela->addLayout(layoutCores);
layoutJanela->addLayout(layoutControlo);
setLayout(layoutJanela);
}
void MainWindow::resetSliders (){
sliderRed-> setValue (0);
sliderGreen->setValue (0);
sliderBlue->setValue (0);
}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QDialog>
class QPushButton;
class QLabel;
class QSpinBox;
class QSlider;
class QGridLayout;
class QVBoxLayout;
class QHBoxLayout;
class MainWindow : public QWidget{
Q_OBJECT
public :
MainWindow ( QWidget* parent = 0 );
private slots :
void resetSliders ( );
private :
QPushButton *botaoReset;
QPushButton *botaoSair;
QLabel *textoRed;
QLabel *textoGreen;
QLabel *textoBlue;
QSpinBox *spinBoxRed;
QSpinBox *spinBoxGreen;
QSpinBox *spinBoxBlue;
QSlider *sliderRed;
QSlider *sliderGreen;
QSlider *sliderBlue;
};
#endif
Vamos então tratar de compilar este exemplo para vermos isto a funcionar.
Vou optar por uma exposição passo a passo.
#1 Que ficheiros temos
Nesta fase convém ter um directoria “rgb” contendo os três ficheiros main.cpp, mainwindow.cpp e mainwindow.h.
- main.cpp
- mainwindow.cpp
- mainwindow.h
#2 Criar o projecto
$ qmake -project
- main.cpp
- mainwindow.cpp
- mainwindow.h
- rgb.pro
#3 Gerar a Makefile
$ qmake rgb.pro
- main.cpp
- mainwindow.cpp
- mainwindow.h
- Makefile
- rgb.pro
#4 E finalmente compilar todos os ficheiros que fazem parte do projecto
$ make
- main.cpp
- mainwindow.cpp
- mainwindow.o
- moc_mainwindow.cpp
- rgb
- main.o
- mainwindow.h
- Makefile
- moc_mainwindow.o
- rgb.pro
Agora basta executar o binário obtido (rgb) para ver este exemplo em acção.
Facilmente se pode concluir que à medida que os projectos adquiram uma dimensão maior, será necessário algum trabalho de arrumação, de forma a evitar esta mistura de ficheiros de diferentes tipos.
Outro aspecto que considero importante aqui referir é que este processo pode ser executado independentemente da plataforma que estivermos a utilizar. Eu utilizo Debian GNU/Linux, mas os utilizadores de Windows (e outros) podem igualmente testar este exemplo.
Neste momento estou a utilizar montes de “hand coding” mas não se assustem! Mais para a frente vamos pedir ajuda ao QT Designer.






