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

四 运行结果

运行视频

源码链接

源码链接

相关推荐
现在,此刻8 分钟前
高可用与高性能数据库配置实践分析(pgSql && clickhouse)
数据库·clickhouse
谅望者34 分钟前
数据分析笔记02:数值方法
大数据·数据库·笔记·数据挖掘·数据分析
dreams_dream39 分钟前
django模型数据查询
数据库·django·sqlite
西游音月41 分钟前
(4)框架搭建:Qt实战项目之主窗体介绍
开发语言·qt
say_fall44 分钟前
C语言编程实战:每日刷题 - day 1
c语言·开发语言·学习
小苏兮1 小时前
【把Linux“聊”明白】进程的概念与状态
linux·运维·服务器·学习
郏国上1 小时前
由于图片视频替换和删除导致阿里云上存在大量系统不再使用的文件如何处理
数据库·mongodb·阿里云
楼田莉子1 小时前
C++/Linux小项目:自主shell命令解释器
linux·服务器·开发语言·c++·后端·学习
百***27111 小时前
UNION 和 UNION ALL 的区别:深入解析 SQL 中的合并操作
数据库·sql·oracle
多喝开水少熬夜1 小时前
SlaugFL论文阅读学习
论文阅读·学习