Publicado em Exemplos Qt, Programação

Entradas e saídas de dados – streaming – C++/Qt – Exemplo 04

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:

exemplo041Como 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();;
        }
    }
}

artigoprincipal

seguinte

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s