QT 4 é a ferramenta que nos permite trabalhar na parte gráfica da programação, logo involve código mais complicado, mas que não é impossível de compreender.
Por agora, o objectivo é ter algo como isto no fim da nossa jornada pela programação em QT 4:
Vamos começar a pouco-a-pouco construir esta janela. O primeiro passo é escrever os dias da semana como no lado esquerdo da nossa aplicação:
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QSlider>
#include <QSpinBox>
#include <QTimeEdit>
#include <QHBoxLayout>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QWidget *janela = new QWidget;
QLabel *segunda = new QLabel("segunda");
QLabel *terca = new QLabel("terca");
QLabel *quarta = new QLabel("quarta");
QLabel *quinta = new QLabel("quinta");
QLabel *sexta = new QLabel("sexta");
QLabel *sabado = new QLabel("sabado");
QLabel *domingo = new QLabel("domingo");
QVBoxLayout *col1 = new QVBoxLayout;
QHBoxLayout *principal = new QHBoxLayout;
col1->addWidget(segunda);
col1->addWidget(terca);
col1->addWidget(quarta);
col1->addWidget(quinta);
col1->addWidget(sexta);
col1->addWidget(sabado);
col1->addWidget(domingo);
principal->addLayout(col1);
janela->setLayout(principal);
janela->show();
return app.exec();
}
Para compilar este código deve proceder da seguinte maneira:
- Guardar este código num ficheiro de texto dentro de um directório (uma pasta no Desktop faz o efeito), que neste caso vou chamar de qt;
- Depois, pela linha de comandos, acedemos à pasta como habitual:
$ cd Desktop/qt/1.cpp
Vou chamar ao ficheiro que contém o código: “1.cpp”, e depois para compilar fazemos seguinte:
$ qmake -project
Isto vai criar o ficheiro qt.pro, para de seguida corrermos o código:
$ qmake qt.pro
Isto vai criar o ficheiro “MakeFile”, o próximo código será:
$ make
Só isto vai criar o ficheiro “qt” e podemos compilar como fazemos num ficheiro C/C++:
$ ./qt
De seguida aparecerá uma janela com os dias da semana, alinhados verticalmente.
- Spacer
O próximo passo será alargar a nossa janela para os lados:
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QSlider>
#include <QSpinBox>
#include <QTimeEdit>
#include <QHBoxLayout>
#include <QSpacerItem>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QWidget *janela = new QWidget;
QSpacerItem *spacer1 = new QSpacerItem(400,0);
QLabel *segunda = new QLabel("segunda");
QLabel *terca = new QLabel("terca");
QLabel *quarta = new QLabel("quarta");
QLabel *quinta = new QLabel("quinta");
QLabel *sexta = new QLabel("sexta");
QLabel *sabado = new QLabel("sabado");
QLabel *domingo = new QLabel("domingo");
QVBoxLayout *col1 = new QVBoxLayout;
QHBoxLayout *principal = new QHBoxLayout;
col1->addWidget(segunda);
col1->addWidget(terca);
col1->addWidget(quarta);
col1->addWidget(quinta);
col1->addWidget(sexta);
col1->addWidget(sabado);
col1->addWidget(domingo);
principal->addLayout(col1);
principal->addItem(spacer1);
janela->setLayout(principal);
janela->show();
return app.exec();
}
Isto vai nos dar a mesma janela que a anterior mas alargada para os lados.
- Spinboxes
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QSlider>
#include <QSpinBox>
#include <QTimeEdit>
#include <QHBoxLayout>
#include <QSpacerItem>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QWidget *janela = new QWidget;
QSpacerItem *spacer1 = new QSpacerItem(400,0);
//Criar os objectos
QLabel *segunda = new QLabel("segunda");
QLabel *terca = new QLabel("terca");
QLabel *quarta = new QLabel("quarta");
QLabel *quinta = new QLabel("quinta");
QLabel *sexta = new QLabel("sexta");
QLabel *sabado = new QLabel("sabado");
QLabel *domingo = new QLabel("domingo");
QSpinBox *spin1 = new QSpinBox;
QSpinBox *spin2 = new QSpinBox;
QSpinBox *spin3 = new QSpinBox;
QSpinBox *spin4 = new QSpinBox;
QSpinBox *spin5 = new QSpinBox;
QSpinBox *spin6 = new QSpinBox;
QSpinBox *spin7 = new QSpinBox;
//Layouts
QVBoxLayout *col1 = new QVBoxLayout;
QVBoxLayout *col2 = new QVBoxLayout;
QHBoxLayout *principal = new QHBoxLayout;
col1->addWidget(segunda);
col1->addWidget(terca);
col1->addWidget(quarta);
col1->addWidget(quinta);
col1->addWidget(sexta);
col1->addWidget(sabado);
col1->addWidget(domingo);
col2->addWidget(spin1);
col2->addWidget(spin2);
col2->addWidget(spin3);
col2->addWidget(spin4);
col2->addWidget(spin5);
col2->addWidget(spin6);
col2->addWidget(spin7);
principal->addLayout(col1);
principal->addLayout(col2);
principal->addItem(spacer1);
janela->setLayout(principal);
janela->show();
return app.exec();
}
Este passo vai-nos criar as spinboxes, que são as caixinhas com as setas para cima e para baixo, para podermos mudar os números.
- Sliders
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QSlider>
#include <QSpinBox>
#include <QTimeEdit>
#include <QHBoxLayout>
#include <QSpacerItem>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QWidget *janela = new QWidget;
QSpacerItem *spacer1 = new QSpacerItem(400,0);
//Criar os objectos
QLabel *segunda = new QLabel("segunda");
QLabel *terca = new QLabel("terca");
QLabel *quarta = new QLabel("quarta");
QLabel *quinta = new QLabel("quinta");
QLabel *sexta = new QLabel("sexta");
QLabel *sabado = new QLabel("sabado");
QLabel *domingo = new QLabel("domingo");
QSpinBox *spin1 = new QSpinBox;
QSpinBox *spin2 = new QSpinBox;
QSpinBox *spin3 = new QSpinBox;
QSpinBox *spin4 = new QSpinBox;
QSpinBox *spin5 = new QSpinBox;
QSpinBox *spin6 = new QSpinBox;
QSpinBox *spin7 = new QSpinBox;
QSlider *sh1 = new QSlider(Qt::Horizontal);
QSlider *sh2 = new QSlider(Qt::Horizontal);
QSlider *sh3 = new QSlider(Qt::Horizontal);
QSlider *sh4 = new QSlider(Qt::Horizontal);
QSlider *sh5 = new QSlider(Qt::Horizontal);
QSlider *sh6 = new QSlider(Qt::Horizontal);
QSlider *sh7 = new QSlider(Qt::Horizontal);
//Layouts
QVBoxLayout *col1 = new QVBoxLayout;
QVBoxLayout *col2 = new QVBoxLayout;
QVBoxLayout *col3 = new QVBoxLayout;
QHBoxLayout *principal = new QHBoxLayout;
col1->addWidget(segunda);
col1->addWidget(terca);
col1->addWidget(quarta);
col1->addWidget(quinta);
col1->addWidget(sexta);
col1->addWidget(sabado);
col1->addWidget(domingo);
col2->addWidget(spin1);
col2->addWidget(spin2);
col2->addWidget(spin3);
col2->addWidget(spin4);
col2->addWidget(spin5);
col2->addWidget(spin6);
col2->addWidget(spin7);
col3->addWidget(sh1);
col3->addWidget(sh2);
col3->addWidget(sh3);
col3->addWidget(sh4);
col3->addWidget(sh5);
col3->addWidget(sh6);
col3->addWidget(sh7);
principal->addLayout(col1);
principal->addLayout(col2);
principal->addLayout(col3);
principal->addItem(spacer1);
janela->setLayout(principal);
janela->show();
return app.exec();
}
Agora temos os sliders (objectos do lado direito das spinboxes).
- Botão
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QSlider>
#include <QSpinBox>
#include <QTimeEdit>
#include <QHBoxLayout>
#include <QSpacerItem>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QWidget *janela = new QWidget;
QSpacerItem *spacer1 = new QSpacerItem(400,0);
QPushButton *sair = new QPushButton("Sair");
//Criar os objectos
QLabel *segunda = new QLabel("segunda");
QLabel *terca = new QLabel("terca");
QLabel *quarta = new QLabel("quarta");
QLabel *quinta = new QLabel("quinta");
QLabel *sexta = new QLabel("sexta");
QLabel *sabado = new QLabel("sabado");
QLabel *domingo = new QLabel("domingo");
QSpinBox *spin1 = new QSpinBox;
QSpinBox *spin2 = new QSpinBox;
QSpinBox *spin3 = new QSpinBox;
QSpinBox *spin4 = new QSpinBox;
QSpinBox *spin5 = new QSpinBox;
QSpinBox *spin6 = new QSpinBox;
QSpinBox *spin7 = new QSpinBox;
QSlider *sh1 = new QSlider(Qt::Horizontal);
QSlider *sh2 = new QSlider(Qt::Horizontal);
QSlider *sh3 = new QSlider(Qt::Horizontal);
QSlider *sh4 = new QSlider(Qt::Horizontal);
QSlider *sh5 = new QSlider(Qt::Horizontal);
QSlider *sh6 = new QSlider(Qt::Horizontal);
QSlider *sh7 = new QSlider(Qt::Horizontal);
//Layouts
QVBoxLayout *col1 = new QVBoxLayout;
QVBoxLayout *col2 = new QVBoxLayout;
QVBoxLayout *col3 = new QVBoxLayout;
QHBoxLayout *principal = new QHBoxLayout;
QVBoxLayout *fim = new QVBoxLayout;
QVBoxLayout *todo = new QVBoxLayout;
col1->addWidget(segunda);
col1->addWidget(terca);
col1->addWidget(quarta);
col1->addWidget(quinta);
col1->addWidget(sexta);
col1->addWidget(sabado);
col1->addWidget(domingo);
col2->addWidget(spin1);
col2->addWidget(spin2);
col2->addWidget(spin3);
col2->addWidget(spin4);
col2->addWidget(spin5);
col2->addWidget(spin6);
col2->addWidget(spin7);
col3->addWidget(sh1);
col3->addWidget(sh2);
col3->addWidget(sh3);
col3->addWidget(sh4);
col3->addWidget(sh5);
col3->addWidget(sh6);
col3->addWidget(sh7);
principal->addLayout(col1);
principal->addLayout(col2);
principal->addLayout(col3);
fim->addItem(spacer1);
fim->addWidget(sair);
todo->addLayout(principal);
todo->addLayout(fim);
janela->setLayout(todo);
janela->show();
return app.exec();
}
Agora criamos o botão sair, mas ainda n faz nada.
- Connect: Spinbox ao Slider
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QSlider>
#include <QSpinBox>
#include <QTimeEdit>
#include <QHBoxLayout>
#include <QSpacerItem>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QWidget *janela = new QWidget;
QSpacerItem *spacer1 = new QSpacerItem(400,0);
QPushButton *sair = new QPushButton("Sair");
//Criar os objectos
QLabel *segunda = new QLabel("segunda");
QLabel *terca = new QLabel("terca");
QLabel *quarta = new QLabel("quarta");
QLabel *quinta = new QLabel("quinta");
QLabel *sexta = new QLabel("sexta");
QLabel *sabado = new QLabel("sabado");
QLabel *domingo = new QLabel("domingo");
QSpinBox *spin1 = new QSpinBox;
QSpinBox *spin2 = new QSpinBox;
QSpinBox *spin3 = new QSpinBox;
QSpinBox *spin4 = new QSpinBox;
QSpinBox *spin5 = new QSpinBox;
QSpinBox *spin6 = new QSpinBox;
QSpinBox *spin7 = new QSpinBox;
QSlider *sh1 = new QSlider(Qt::Horizontal);
QSlider *sh2 = new QSlider(Qt::Horizontal);
QSlider *sh3 = new QSlider(Qt::Horizontal);
QSlider *sh4 = new QSlider(Qt::Horizontal);
QSlider *sh5 = new QSlider(Qt::Horizontal);
QSlider *sh6 = new QSlider(Qt::Horizontal);
QSlider *sh7 = new QSlider(Qt::Horizontal);
//Layouts
QVBoxLayout *col1 = new QVBoxLayout;
QVBoxLayout *col2 = new QVBoxLayout;
QVBoxLayout *col3 = new QVBoxLayout;
QHBoxLayout *principal = new QHBoxLayout;
QVBoxLayout *fim = new QVBoxLayout;
QVBoxLayout *todo = new QVBoxLayout;
col1->addWidget(segunda);
col1->addWidget(terca);
col1->addWidget(quarta);
col1->addWidget(quinta);
col1->addWidget(sexta);
col1->addWidget(sabado);
col1->addWidget(domingo);
col2->addWidget(spin1);
col2->addWidget(spin2);
col2->addWidget(spin3);
col2->addWidget(spin4);
col2->addWidget(spin5);
col2->addWidget(spin6);
col2->addWidget(spin7);
col3->addWidget(sh1);
col3->addWidget(sh2);
col3->addWidget(sh3);
col3->addWidget(sh4);
col3->addWidget(sh5);
col3->addWidget(sh6);
col3->addWidget(sh7);
QObject::connect(spin1, SIGNAL(valueChanged(int)), sh1, SLOT(setValue (int)));
QObject::connect(spin2, SIGNAL(valueChanged(int)), sh2, SLOT(setValue (int)));
QObject::connect(spin3, SIGNAL(valueChanged(int)), sh3, SLOT(setValue (int)));
QObject::connect(spin4, SIGNAL(valueChanged(int)), sh4, SLOT(setValue (int)));
QObject::connect(spin5, SIGNAL(valueChanged(int)), sh5, SLOT(setValue (int)));
QObject::connect(spin6, SIGNAL(valueChanged(int)), sh6, SLOT(setValue (int)));
QObject::connect(spin7, SIGNAL(valueChanged(int)), sh7, SLOT(setValue (int)));
QObject::connect(sh1, SIGNAL(valueChanged(int)), spin1, SLOT(setValue (int)));
QObject::connect(sh2, SIGNAL(valueChanged(int)), spin2, SLOT(setValue (int)));
QObject::connect(sh3, SIGNAL(valueChanged(int)), spin3, SLOT(setValue (int)));
QObject::connect(sh4, SIGNAL(valueChanged(int)), spin4, SLOT(setValue (int)));
QObject::connect(sh5, SIGNAL(valueChanged(int)), spin5, SLOT(setValue (int)));
QObject::connect(sh6, SIGNAL(valueChanged(int)), spin6, SLOT(setValue (int)));
QObject::connect(sh7, SIGNAL(valueChanged(int)), spin7, SLOT(setValue (int)));
principal->addLayout(col1);
principal->addLayout(col2);
principal->addLayout(col3);
fim->addItem(spacer1);
fim->addWidget(sair);
todo->addLayout(principal);
todo->addLayout(fim);
janela->setLayout(todo);
janela->show();
return app.exec();
}
Agora temos as spinboxes, e os sliders ligados, fazendo com que se alterarmos um número de um lado, o outro mude automaticamente para o mesmo.
- Botão Terminar
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QSlider>
#include <QSpinBox>
#include <QTimeEdit>
#include <QHBoxLayout>
#include <QSpacerItem>
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QWidget *janela = new QWidget;
QSpacerItem *spacer1 = new QSpacerItem(400,0);
QPushButton *sair = new QPushButton("&Sair");
//Criar os objectos
QLabel *segunda = new QLabel("segunda");
QLabel *terca = new QLabel("terca");
QLabel *quarta = new QLabel("quarta");
QLabel *quinta = new QLabel("quinta");
QLabel *sexta = new QLabel("sexta");
QLabel *sabado = new QLabel("sabado");
QLabel *domingo = new QLabel("domingo");
QSpinBox *spin1 = new QSpinBox;
QSpinBox *spin2 = new QSpinBox;
QSpinBox *spin3 = new QSpinBox;
QSpinBox *spin4 = new QSpinBox;
QSpinBox *spin5 = new QSpinBox;
QSpinBox *spin6 = new QSpinBox;
QSpinBox *spin7 = new QSpinBox;
spin1->setRange (0, 5);
spin2->setRange (0, 5);
spin3->setRange (0, 5);
spin4->setRange (0, 5);
spin5->setRange (0, 5);
spin6->setRange (0, 5);
spin7->setRange (0, 5);
QSlider *sh1 = new QSlider(Qt::Horizontal);
QSlider *sh2 = new QSlider(Qt::Horizontal);
QSlider *sh3 = new QSlider(Qt::Horizontal);
QSlider *sh4 = new QSlider(Qt::Horizontal);
QSlider *sh5 = new QSlider(Qt::Horizontal);
QSlider *sh6 = new QSlider(Qt::Horizontal);
QSlider *sh7 = new QSlider(Qt::Horizontal);
sh1->setRange (0, 5);
sh2->setRange (0, 5);
sh3->setRange (0, 5);
sh4->setRange (0, 5);
sh5->setRange (0, 5);
sh6->setRange (0, 5);
sh7->setRange (0, 5);
//Layouts
QVBoxLayout *col1 = new QVBoxLayout;
QVBoxLayout *col2 = new QVBoxLayout;
QVBoxLayout *col3 = new QVBoxLayout;
QHBoxLayout *principal = new QHBoxLayout;
QVBoxLayout *fim = new QVBoxLayout;
QVBoxLayout *todo = new QVBoxLayout;
col1->addWidget(segunda);
col1->addWidget(terca);
col1->addWidget(quarta);
col1->addWidget(quinta);
col1->addWidget(sexta);
col1->addWidget(sabado);
col1->addWidget(domingo);
col2->addWidget(spin1);
col2->addWidget(spin2);
col2->addWidget(spin3);
col2->addWidget(spin4);
col2->addWidget(spin5);
col2->addWidget(spin6);
col2->addWidget(spin7);
col3->addWidget(sh1);
col3->addWidget(sh2);
col3->addWidget(sh3);
col3->addWidget(sh4);
col3->addWidget(sh5);
col3->addWidget(sh6);
col3->addWidget(sh7);
QObject::connect(spin1, SIGNAL(valueChanged(int)), sh1, SLOT(setValue (int)));
QObject::connect(spin2, SIGNAL(valueChanged(int)), sh2, SLOT(setValue (int)));
QObject::connect(spin3, SIGNAL(valueChanged(int)), sh3, SLOT(setValue (int)));
QObject::connect(spin4, SIGNAL(valueChanged(int)), sh4, SLOT(setValue (int)));
QObject::connect(spin5, SIGNAL(valueChanged(int)), sh5, SLOT(setValue (int)));
QObject::connect(spin6, SIGNAL(valueChanged(int)), sh6, SLOT(setValue (int)));
QObject::connect(spin7, SIGNAL(valueChanged(int)), sh7, SLOT(setValue (int)));
QObject::connect(sh1, SIGNAL(valueChanged(int)), spin1, SLOT(setValue (int)));
QObject::connect(sh2, SIGNAL(valueChanged(int)), spin2, SLOT(setValue (int)));
QObject::connect(sh3, SIGNAL(valueChanged(int)), spin3, SLOT(setValue (int)));
QObject::connect(sh4, SIGNAL(valueChanged(int)), spin4, SLOT(setValue (int)));
QObject::connect(sh5, SIGNAL(valueChanged(int)), spin5, SLOT(setValue (int)));
QObject::connect(sh6, SIGNAL(valueChanged(int)), spin6, SLOT(setValue (int)));
QObject::connect(sh7, SIGNAL(valueChanged(int)), spin7, SLOT(setValue (int)));
QObject::connect(sair, SIGNAL(clicked()), &app, SLOT(quit()));
principal->addLayout(col1);
principal->addLayout(col2);
principal->addLayout(col3);
fim->addItem(spacer1);
fim->addWidget(sair);
todo->addLayout(principal);
todo->addLayout(fim);
janela->setLayout(todo);
janela->show();
return app.exec();
}
O programa já fazia tudo, menos o botão sair que agora, quando clicado termina mesmo o programa.
