Aprenda C++ com QT Creator

  • Página Inicial
  • Contato!
  • Tudo sobre C++ com QT Creator Parte 1!
  • Tudo sobre C++ com QT Creator Parte 2!
  • Tudo sobre C++ com QT Creator Parte 3!
  • Tudo sobre C++ com QT Creator Parte 4!
  • Tudo sobre C++ com QT Creator Parte 5!
  • Tudo sobre C++ com QT Creator Parte 6!
  • Tudo sobre C++ com QT Creator Parte 7!
  • C++ com QT Creator e Banco de Dados Parte 2

    Passando Valores pra Outro Formulário

    Adicione um QT Designer Form Class com o nome EditarContato, e crie um formulário igual ao do NovoContato, só que com dois labels para o ID com o nome lblNome e a identificação do mesmo.

    PS: Adicione um Dialog, o Window Main não funciona nesse caso.

    Vá no arquivo editarcontato.h e adicione um parâmetro de id pra contato, assim:

    
    explicit EditarContatos(QWidget *parent = nullptr, int idCont = 0);
    
    

    E no arquivo editarcontato.cpp, faça assim:

    
    EditarContatos::EditarContatos(QWidget *parent, int idCont) : QDialog(parent), ui(new Ui::EditarContatos) {
        ui->setupUi(this);
    }
    
    

    Agopra vá no formulário PesquisaContatos e adicione o slot clicked no botão editar, e coloque esse código:

    
    int linha = ui->tbList->currentRow();
    int id = ui->tbList->item(linha, 0)->text().toInt(); // Isso pega a id da linha selecionadas
    
    EditarContatos editCont(this, id); // Inclua editarcontatos.h
    
    editCont.exec();
    
    

    Programação da Tela pra Edição de Contatos

    Primeiro vá no construtor de editarcontato.cpp e altere ele dessa forma:

    
    int EditarContatos::id = 0; // Adicione essa variável estática na classe editarContatos em editarcontatos.h
    
    EditarContatos::EditarContatos(QWidget *parent, int idCont) : QDialog(parent), ui(new Ui::EditarContatos) {
        ui->setupUi(this);
        
        id = idCont;
    
        QSqlQuery query; // Inclua QtSql
        QString sql = "select * from contato where id = ?";
    
        query.prepare(sql);
    
        query.bindValue(0, id);
    
        if(query.exec()) {
            query.first();
    
            // Pra preencher a janela edição. A ordem dos números são as colunas da tabela, contadas a partir do zero (id).
            ui->lblNome->setText(query.value(0).toString());
            ui->txtNome->setText(query.value(1).toString());
            ui->txtTel->setText(query.value(2).toString());
            ui->txtMail->setText(query.value(3).toString());
        }
        else {
            QMessageBox::critical(this, "Erro", "Erro ao Selecionar Contato!"); // Inclua QMessageBox
        }
    }
    
    

    Adicione no formulário EditarContato, o slot clicked e coloque esse código:

    
    void EditarContatos::on_btnGrav_clicked() {
        QString nome = ui->txtNome->text().trimmed();
        QString tel = ui->txtTel->text().trimmed();
        QString mail = ui->txtMail->text().trimmed();
    
        QSqlQuery query;
        QString sql = "update contato set nome = ?, telefone = ?, email = ? where id = ?";
    
        query.prepare(sql);
    
        query.bindValue(0, nome);
        query.bindValue(1, tel);
        query.bindValue(2, mail);
        query.bindValue(3, id);
    
        if(query.exec()) {
            QMessageBox::information(this, "Info", "Atualizado com Sucesso!"); // Inclua QMessageBox
    
            this->close();
        }
        else {
            QMessageBox::critical(this, "Erro", "Erro ao Atualizar Contato!"); // Inclua QMessageBox
        }
    }
    
    

    Para atualizar os dados na tabela PesquisaContatos, vá em pesquisacontato.cpp, no método do botão editar e altere o código assim:

    
    void PesquisaContatos::on_btnEdi_clicked() {
        int linha = ui->tbList->currentRow();
        int id = ui->tbList->item(linha, 0)->text().toInt(); // Isso pega a id da linha selecionadas
    
        EditarContatos editCont(this, id); // Inclua editarcontatos.h
    
        editCont.exec();
    
        QSqlQuery query; // Inclua QtSQL
        QString sql = "select * from contato where id = ?";
    
        query.prepare(sql);
    
        query.bindValue(0, id);
    
        if(query.exec()) {
            query.first();
            ui->tbList->setItem(linha, 1, new QTableWidgetItem(query.value(1).toString())); // Linha, coluna e item.
            ui->tbList->setItem(linha, 2, new QTableWidgetItem(query.value(2).toString()));
            ui->tbList->setItem(linha, 3, new QTableWidgetItem(query.value(3).toString()));
        }
    }
    
    

    Pesquisa de Contatos

    Para pesquisar contatos, basta colocar isso no slot clicked do botão pesquisar:

    
    void PesquisaContatos::on_btnPesq_clicked() {
        QString pesq = ui->txtPesq->text().trimmed();
    
        QSqlQuery query; // Inclua QtSql
        QString sql = "select * from contato where nome like ?";
     
        query.prepare(sql);
    
        query.bindValue(0, '%' + pesq + '%');
    
        if(query.exec()) {
            int linha = 0; // Contador de linhas, a partir do zero
    
            ui->tbList->setRowCount(0); // Limpa a lista
    
            while(query.next()) {
                ui->tbList->insertRow(linha); // Contador vai dentro do método
                ui->tbList->setItem(linha, 0, new QTableWidgetItem(query.value(0).toString())); // Números das colunas, a partir do zero
                ui->tbList->setItem(linha, 1, new QTableWidgetItem(query.value(1).toString()));
                ui->tbList->setItem(linha, 2, new QTableWidgetItem(query.value(2).toString()));
                ui->tbList->setItem(linha, 3, new QTableWidgetItem(query.value(3).toString()));
    
                ui->tbList->setRowHeight(linha, 20); // Altura da linha
    
                linha++;
            }
        }
        else {
            QMessageBox::critical(this, "Erro", "Erro ao Pesquisar Tabela de Contatos"); // Inclua QMessageBox
        }
    }