Implementação e Recursos Específicos do Qt
Uso do Qt Creator
O projeto foi desenvolvido no Qt Creator devido às suas vantagens específicas para o desenvolvimento em C++ com Qt. O Qt Creator é uma IDE poderosa que oferece:
Integração Completa com Qt: Ferramentas integradas para design de interfaces gráficas, suporte a signals e slots, e gerenciamento de recursos.
Facilidade de Depuração: Ferramentas avançadas de depuração que ajudam a identificar e corrigir erros rapidamente.
Gerenciamento de Projetos: Suporte nativo ao CMake, facilitando a configuração e construção do projeto.
Documentação e Exemplos: Acesso fácil à documentação do Qt e exemplos de código diretamente na IDE.
Herança das Classes do Qt
Todas as classes do projeto herdam de QDialog, QObject, QWidget ou QMainWindow, dependendo do caso, para aproveitar os benefícios oferecidos pelo Qt:
QDialog: Utilizado para janelas de diálogo, como cadastro de pacientes e colaboradores.
QWidget: Base para componentes visuais personalizados.
QMainWindow: Utilizado para a janela principal da aplicação.
QObject: Base para todas as classes que utilizam o sistema de signals e slots do Qt.
Como Funcionam os Sinais e Slots
O sistema de signals e slots é um dos pilares do framework Qt para comunicação entre objetos. Ele permite que objetos interajam de forma desacoplada, facilitando a criação de interfaces dinâmicas e reativas.
Definição de Conceitos
Sinal (signal): Um sinal é definido na seção signals: de uma classe no Qt, geralmente uma classe derivada de QObject.
Slot: Slots são funções chamadas automaticamente quando um sinal correspondente é emitido. Eles são definidos como funções membros.
Conexão: Para conectar um sinal a um slot, utilizamos o método connect(). connect(emissor, SIGNAL(sinal()), receptor, SLOT(slot()));
Emissão do Sinal: Para emitir um sinal, usa-se emit. Quando o sinal é emitido, todos os slots conectados são executados.
Exemplo: Classe Paciente
Definição de Sinal na Classe Paciente: A classe Paciente emite o sinal pacienteCadastrado(int id) quando um paciente é salvo no banco:
signals:
void pacienteCadastrado(int id);
Emissão do Sinal: O sinal é emitido após a execução bem-sucedida do cadastro no banco:
if (query.exec())
{
emit pacienteCadastrado(query.lastInsertId().toInt()); // Emite o ID gerado para o paciente
return true;
} else {
return false;
}
Conexão do Sinal ao Slot: No construtor da classe cadastroPacientes, o sinal emitido pelo objeto Paciente é conectado ao slot pacienteCadastrado:
connect(&paciente, &Paciente::pacienteCadastrado, this, &cadastroPacientes::pacienteCadastrado);
Conexão com a Janela Principal (MainWindow): A conexão também é feita na classe MainWindow:
bool connected = connect(&cadastramento, &cadastroPacientes::pacienteCadastrado,
this, &MainWindow::adicionarPacienteNaTabela);
if (!connected) {
qDebug() << "Erro ao conectar o sinal pacienteCadastrado";
}
Reação ao Sinal (MainWindow::adicionarPacienteNaTabela): Quando o paciente é cadastrado com sucesso, o slot adicionarPacienteNaTabela(int id) é executado, carregando os dados diretamente na QTableWidget:
void MainWindow::adicionarPacienteNaTabela(int id)
{
QSqlQuery query;
query.prepare("SELECT * FROM tb_pacientes WHERE id = :id");
query.bindValue(":id", id);
if (query.exec() && query.first()) {
int linha = ui->tw_pacientes->rowCount();
ui->tw_pacientes->insertRow(linha);
for (int i = 0; i <= 8; i++) {
ui->tw_pacientes->setItem(linha, i, new QTableWidgetItem(query.value(i).toString()));
}
redimensionarTable(ui->tw_pacientes);
} else {
QMessageBox::warning(this, " ", "Erro ao carregar o novo paciente.");
}
}
Diagrama de Comunicação das Classes via Signals e Slots

Atualizado