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.