O exemplo anterior não tira partido dos recursos gráficos do Qt.
Vamos supor que queremos este código a obter os nomes dos ficheiros e as palavras a procurar/ substituir a partir de um pequeno formulário. Algo semelhante à imagem seguinte:
Como agora estou a utilizar o Qt Creator faria algo do tipo:
- File > New > Projects > Qt4 Gui Application
- Depois na euforia do next … next … next … não esquecer que a classe base que utilizo é QDialog :)
Deixo aqui o código do .h e do .cpp apenas para permitir a comparação com o exemplo03.
O projecto pode ser obtido a partir deste link.
dialog.h
#define DIALOG_H
#include <QtGui/QDialog>
#include <QMessageBox>
#include <QTextStream>
#include <QFile>
namespace Ui
{
class DialogClass;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void processar();
private:
Ui::DialogClass *ui;
QFile original;
QFile copia;
QString line, new_line;
};
#endif // DIALOG_H
dialog.cpp
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent)
: QDialog(parent), ui(new Ui::DialogClass)
{
ui->setupUi(this);
connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
connect(ui->okButton, SIGNAL(clicked()), this, SLOT(accept()));
connect(ui->goButton, SIGNAL(clicked()), this, SLOT(processar()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::processar(){
QMessageBox msgBox;
msgBox.setModal(true);
if(ui->original->text().isEmpty() || ui->copia->text().isEmpty() ||
ui->palavra->text().isEmpty() || ui->novapalavra->text().isEmpty()){
msgBox.setText("É obrigatório o preenchimento de todos os campos!");
msgBox.exec();
}else{
original.setFileName(ui->original->text());
copia.setFileName(ui->copia->text());
if (original.open(QFile::ReadOnly)) {
copia.open(QFile::WriteOnly);
QTextStream in(&original);
QTextStream out(&copia);
out.setCodec("UTF-8");
in.setCodec("UTF-8");
do {
line = in.readLine();
new_line = line;
new_line.replace(ui->palavra->text(), ui->novapalavra->text());
out << new_line << endl;
} while (!line.isNull());
original.close();
copia.close();
msgBox.setText("Sucesso!");
msgBox.exec();;
}else{
msgBox.setText("Erro ao abrir o ficheiro: " + ui->original->text());
msgBox.exec();;
}
}
}