Introdução

Neste tutorial, você aprenderá a construir um sistema de gerenciamento de tarefas utilizando C++ com a biblioteca Qt e o banco de dados SQLite. A construção deste sistema é uma excelente maneira de entender como desenvolver interfaces gráficas interativas com Qt, ao mesmo tempo que se aprende a manipular um banco de dados leve como o SQLite. Ao longo do tutorial, abordaremos desde a configuração do ambiente de desenvolvimento até a implementação de funcionalidades como a criação, edição, e remoção de tarefas. Este guia completo será útil para desenvolvedores iniciantes e intermediários que buscam aprimorar suas habilidades em C++ e desenvolvimento de aplicações com interfaces gráficas.

Etapas

  1. Configuração do Ambiente de Desenvolvimento

    Certifique-se de ter o Qt Creator e o SQLite instalados na sua máquina. Você pode baixar o Qt no site oficial (https://www.qt.io/download). Instale o SQLite de acordo com as instruções do site oficial (https://www.sqlite.org/download.html). Após a instalação, verifique se você consegue criar projetos no Qt Creator.

    commands
    # Abrir o Qt Creator
    # Criar um novo projeto Qt Widgets Application

  2. Criando a Interface Gráfica

    Utilizaremos o Qt Designer para criar a interface gráfica do nosso sistema. A interface deve ter um campo de texto para inserir novas tarefas, um botão para adicionar a tarefa e uma lista para exibir as tarefas criadas. Abra o Qt Designer e crie um formulário que contenha um QLineEdit, um QPushButton e um QListWidget.

    ui_file
    mainwindow.ui (criado pelo Qt Designer)

  3. Configuração do Projeto

    No arquivo .pro do projeto, adicione as dependências necessárias para usar SQLite. Isso permite que o Qt utilize o SQLite como mecanismo de banco de dados.

    project_file
    QT += sql

  4. Implementação do Modelo de Dados

    Crie uma classe chamada Task que representa uma tarefa. Essa classe deve ter atributos como id, title e status. Implemente métodos para manipular esses dados.

    Task.h
    #ifndef TASK_H
    #define TASK_H
    
    #include <QString>
    
    class Task {
    public:
        Task(int id, const QString& title);
        int getId() const;
        QString getTitle() const;
    
    private:
        int id;
        QString title;
    };
    
    #endif // TASK_H

    Task.cpp
    #include "Task.h"
    
    Task::Task(int id, const QString& title) : id(id), title(title) {}
    
    int Task::getId() const { return id; }
    QString Task::getTitle() const { return title; }

  5. Conexão com o Banco de Dados SQLite

    Crie uma classe DatabaseManager para gerenciar a conexão com o banco de dados SQLite. Esta classe deve incluir métodos para abrir o banco de dados e executar comandos SQL.

    DatabaseManager.h
    #ifndef DATABASEMANAGER_H
    #define DATABASEMANAGER_H
    
    #include <QSqlDatabase>
    #include <QString>
    
    class DatabaseManager {
    public:
        DatabaseManager();
        bool openDatabase();
        void closeDatabase();
    
    private:
        QSqlDatabase db;
    };
    
    #endif // DATABASEMANAGER_H

    DatabaseManager.cpp
    #include "DatabaseManager.h"
    #include <QSqlError>
    #include <QSqlQuery>
    
    DatabaseManager::DatabaseManager() {
        db = QSqlDatabase::addDatabase("QSQLITE");
        db.setDatabaseName("tasks.db");
    }
    
    bool DatabaseManager::openDatabase() {
        return db.open();
    }
    
    void DatabaseManager::closeDatabase() {
        db.close();
    }

  6. Implementação da Lógica de Adição de Tarefas

    Adicione a funcionalidade de adicionar tarefas ao banco de dados quando o botão de adicionar for clicado. Isso deve incluir a coleta do título da tarefa do QLineEdit e a execução de uma consulta SQL de inserção.

    MainWindow.cpp
    #include "MainWindow.h"
    #include "ui_mainwindow.h"
    #include "DatabaseManager.h"
    
    MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {
        ui->setupUi(this);
        databaseManager = new DatabaseManager();
        if (databaseManager->openDatabase()) {
            connect(ui->addButton, &QPushButton::clicked, this, &MainWindow::addTask);
        }
    }
    
    void MainWindow::addTask() {
        QString taskTitle = ui->taskLineEdit->text();
        QSqlQuery query;
        query.prepare("INSERT INTO tasks (title) VALUES (:title)");
        query.bindValue(":title", taskTitle);
        query.exec();
        // Atualizar a lista de tarefas
    }

  7. Listando as Tarefas

    Implemente a lógica para listar as tarefas armazenadas no banco de dados no QListWidget quando a aplicação for iniciada.

    MainWindow.cpp
    void MainWindow::loadTasks() {
        QSqlQuery query("SELECT * FROM tasks");
        while (query.next()) {
            QString taskTitle = query.value(1).toString();
            ui->taskListWidget->addItem(taskTitle);
        }
    }

  8. Testando a Aplicação

    Compile e execute a aplicação no Qt Creator. Teste adicionando, visualizando e confirmando se as tarefas estão sendo corretamente armazenadas no banco de dados e exibidas na lista.

    commands
    # Compilar e executar a aplicação
    Ctrl + R (Qt Creator)

  9. Conclusão e Melhorias Futuras

    Avalie o que foi aprendido e discuta possíveis melhorias, como implementar a edição e remoção de tarefas, adicionar funcionalidades de recuperação de tarefas e melhorias na interface gráfica.

    notes
    Considere implementar um botão para remover tarefas selecionadas da lista e do banco de dados.

Conclusão

Neste tutorial, você aprendeu a implementar um sistema de gerenciamento de tarefas utilizando C++ com Qt e SQLite. Desde a configuração do ambiente de desenvolvimento até a implementação das principais funcionalidades, você agora tem uma base sólida para desenvolver aplicações C++ com interfaces gráficas. Considere explorar mais sobre Qt e SQLite para aprimorar ainda mais suas habilidades, adicionando funcionalidades como edição e remoção de tarefas, além de explorar a criação de uma interface mais amigável e responsiva.

Hashtags

#C++ #Qt #SQLite #DesenvolvimentoDeSoftware #InterfaceGrafica