Com a entrada neste módulo 11, Programação Orientada a Objectos Avançada, era necessário um IDE que nos permitisse programar em C++ utilizando Qt. Para tal, o nosso professor escolheu o QT Creator, que apesar de não ser ainda estável serve perfeitamente os nossos interesses.
Utilizando sempre o paradigma ADT, vamos continuar a programar em QT e C++, com uma pequena diferença para o módulo 8, pois a partir de agora vamos criar a interface com o Designer, uma ferramenta incorporada no QT Creator em vez de utilizarmos o código fonte.

Aqui está um exemplo de um programa que verifica se uma matrícula é válida ou não, chamado IdDoAutomovelDialog.
IdDoAutomovelDialog.cpp
#include <QtGui>
#include "IdDoAutomovelDialog.h"
IdDoAutomovelDialog::IdDoAutomovelDialog(QWidget *parent):QDialog(parent){
//Label
label = new QLabel("&Matrícula:");
//Line Edit
lineEdit = new QLineEdit;
//Buddyes
label->setBuddy(lineEdit);
//Spacer
horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
//OK Button
okButton = new QPushButton("Ok");
okButton->setEnabled(false);
//CANCEL Button
cancelButton = new QPushButton("Cancel");
cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
//Validar a matrícula introduzida ( http://pt.wikipedia.org/wiki/Matr%C3%ADculas_autom%C3%B3veis_em_Portugal )
listaMatriculasValidas = new QStringList;
listaMatriculasValidas->append("[A-Za-z]{2,2}[-][0-9]{2,2}[-][0-9]{2,2}");
listaMatriculasValidas->append("[0-9]{2,2}[-][0-9]{2,2}[-][A-Za-z]{2,2}"); //or
listaMatriculasValidas->operator <<("[0-9]{2,2}[-][A-Za-z]{2,2}[-][0-9]{2,2}");
QRegExp regExp(listaMatriculasValidas->join("|"));
lineEdit->setValidator(new QRegExpValidator(regExp, this));
//Definir acções
connect(lineEdit, SIGNAL(textChanged(const QString &)),
this, SLOT(on_lineEdit_textChanged()));
connect(okButton, SIGNAL(clicked()),
this, SLOT(accept()));
connect(cancelButton, SIGNAL(clicked()),
this, SLOT(close()));
//layout Dialog
horizontalLayout = new QHBoxLayout;
horizontalLayout_2 = new QHBoxLayout;
verticalLayout = new QVBoxLayout;
horizontalLayout->addWidget(label);
horizontalLayout->addWidget(lineEdit);
horizontalLayout_2->addItem(horizontalSpacer);
horizontalLayout_2->addWidget(okButton);
horizontalLayout_2->addWidget(cancelButton);
verticalLayout->addLayout(horizontalLayout);
verticalLayout->addLayout(horizontalLayout_2);
setWindowTitle("Matrícula");
setLayout(verticalLayout);
//Tab order
QWidget::setTabOrder(lineEdit, okButton);
QWidget::setTabOrder(okButton, cancelButton);
}
void IdDoAutomovelDialog::on_lineEdit_textChanged(){
okButton->setEnabled(lineEdit->hasAcceptableInput());
}
IdDoAutomovelDialog.h
#ifndef IDDOAUTOMOVELDIALOG_H
#define IDDOAUTOMOVELDIALOG_H
#include <QDialog>
class QLabel;
class QLineEdit;
class QSpacerItem;
class QPushButton;
class QHBoxLayout;
class QVBoxLayout;
class QString;
class QRegExp;
class IdDoAutomovelDialog : public QDialog
{
Q_OBJECT
public:
IdDoAutomovelDialog(QWidget *parent = 0);
private slots:
void on_lineEdit_textChanged();
private:
QLabel *label;
QLineEdit *lineEdit;
QSpacerItem *horizontalSpacer;
QPushButton *okButton;
QPushButton *cancelButton;
QStringList *listaMatriculasValidas;
QVBoxLayout *verticalLayout;
QHBoxLayout *horizontalLayout;
QHBoxLayout *horizontalLayout_2;
};
#endif // IDDOAUTOMOVELDIALOG_H
main.cpp
#include <QApplication>
#include "IdDoAutomovelDialog.h"
int main(int argc, char *argv[]){
QApplication app(argc, argv);
IdDoAutomovelDialog *dialog = new IdDoAutomovelDialog;
dialog->show();
return app.exec();
}
Se a matricula for válida o botão OK passa a “Enable”, caso contrário estará sempre “Disable”.

Publicado por heldercosta 
