qt实用学习案例:数据库设计+图表显示+model-view模式+样式表定制

整理不易,如有帮助,请点赞收藏--------彡皮

一 需求

1,使用MySQL存储数据,合理设计数据内容和存储方式

2,数据展示要基于饼状图、柱状图和折线图,展示的源数据来自数据库,数据内容可自行设计

3,提供tableview等表格显示数据源

4,使用model-view设计模式,使用qss样式表(以加载资源表的方式,方便后续修改界面样式)进行样式设计

5,总代码行不少于2000行

6,整体UI界面需布局合理,用户交互方便

7,在关键处需要有代码注释

二 设计

1,数据库设计:创建一个简单的数据库,用于存储销售数据

2,程序主要功能:连接mysql,实用tableview显示数据,并允许用户增删改查

3,提供三种图表显示:饼状图(显示各产品销售占比)、柱状图(按月展示销售额)、折线图(按月展示销售额趋势)

4,使用MVD(Model-View-Delegate)模式,其中Model使用QSqlTableModel,View使用QTableView,Delegate用于自定义显示或编辑。

5,使用QSS样式表美化界面,并通过资源文件加载。

6,使用QTabWidget将表格和图表放在不同的标签页中,同时提供一些按钮和组合框用于交互(比如选择图表类型、筛选数据等)。

代码结构

三 核心代码

database.cpp

  • 连接数据库
bash 复制代码
    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("mysql");
    db.setUserName("root");
    db.setPassword("112233");
bash 复制代码
    if (!db.open()) {
        qDebug() << "Error: Failed to connect to database." << db.lastError();
        connected = false;
        return false;
    }
  • 初始化数据库
bash 复制代码
    // 检查表是否存在,不存在则创建
    createTables();

    // 检查是否有数据,没有则插入示例数据
    QSqlQuery query("SELECT COUNT(*) FROM products");
    if (query.next() && query.value(0).toInt() == 0) {
        insertSampleData();
    }

database.h

bash 复制代码
#ifndef DATABASE_H
#define DATABASE_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <QDebug>
#include <QSqlQueryModel>

class Database : public QObject
{
    Q_OBJECT
public:
    explicit Database(QObject *parent = nullptr);
    ~Database();

    bool connectToDatabase();
    void initializeDatabase();
    bool isConnected() const;

    // 数据操作接口
    QSqlQueryModel* getSalesData();
    QSqlQueryModel* getProductsData();
    QSqlQueryModel* getRegionsData();
    bool addSaleRecord(const QVariantMap &record);
    bool updateSaleRecord(int id, const QVariantMap &record);
    bool deleteSaleRecord(int id);

private:
    QSqlDatabase db;
    bool connected;

    void createTables();
    void insertSampleData();
};

#endif // DATABASE_H

mainwindow.h

bash 复制代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QSqlTableModel>
#include <QChartView>
#include <QBarSeries>
#include <QPieSeries>
#include <QLineSeries>
#include <QValueAxis>
#include <QCategoryAxis>
#include "database.h"
#include <QTreeWidgetItem>
#include <QDateEdit>

QT_CHARTS_USE_NAMESPACE

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void onTreeViewItemClicked(QTreeWidgetItem *item, int column);
    void onAddRecord(bool checked);
    void onDeleteRecord(bool checked);
    void onRefreshData(bool checked);
    void onFilterChanged(const QString &);
    void toggleDarkMode(bool checked);
    void showAboutDialog(bool checked);

    void on_filterComboBox_currentTextChanged(const QString &arg1);


private:
    Ui::MainWindow *ui;
    Database *db;
    QSqlTableModel *salesModel;
    QSqlTableModel *productsModel;
    QSqlTableModel *regionsModel;

    bool darkMode;

    void setupDatabase();
    void setupUI();
    void setupCharts();
    void setupConnections();
    void applyStyleSheet(const QString &styleSheet);

    void showSalesTable();
    void showProductsTable();
    void showRegionsTable();

    void showSalesPieChart();
    void showSalesBarChart();
    void showSalesTrendChart();

    void updateSalesPieChart();
    void updateSalesBarChart();
    void updateSalesTrendChart();
};

#endif // MAINWINDOW_H

四 运行结果

运行视频

源码链接

源码链接

相关推荐
Amazing_Cacao5 小时前
CFCA精品可可产区风土体系(亚洲):彻底拒绝应试背诵,将感官复核作为检验真实物理差异的唯一铁律
学习
聆听。。花开雨落7 小时前
mybatis的typeHandler 作用
数据库·mybatis
pxzsky7 小时前
PG17数据库安装中分分词插件:pg_jieba
数据库·postgresql·pg_jieba
她说可以呀8 小时前
Redis哨兵
数据库·redis·bootstrap
霸道流氓气质8 小时前
KMS 密钥管理服务(Key Management Service)原理与实践
linux·服务器·数据库
kirs_ur8 小时前
CXL(Compute Express Link)— 内存扩展的未来
服务器·数据库·性能优化
MonolithIoT10 小时前
实战方案|设备备件无人值守仓库:连续化产线运维备件 7×24 小时数字化管控方案
运维·网络·数据库
瞬间&永恒~10 小时前
【MySQL】4-6:在同一个主机上使用 systemd 运行多个 MySQL服务器
服务器·数据库·mysql
心机之蛙qee11 小时前
Redis的主从、哨兵及集群
数据库·redis·缓存