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