当前位置: 首页 > news >正文

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

  • 连接数据库
    db = QSqlDatabase::addDatabase("QMYSQL");db.setHostName("localhost");db.setDatabaseName("mysql");db.setUserName("root");db.setPassword("112233");
    if (!db.open()) {qDebug() << "Error: Failed to connect to database." << db.lastError();connected = false;return false;}
  • 初始化数据库
    // 检查表是否存在,不存在则创建createTables();// 检查是否有数据,没有则插入示例数据QSqlQuery query("SELECT COUNT(*) FROM products");if (query.next() && query.value(0).toInt() == 0) {insertSampleData();}
  • database.h

#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

#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_NAMESPACEnamespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic: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

四 运行结果

运行视频

源码链接

源码链接

http://www.dtcms.com/a/516452.html

相关文章:

  • 脉冲神经网络最新文献合集-XX
  • wordpress做学校网站thinkphp 网站源码
  • 数据库(6)
  • 【性能优化】--perfetto分析思路
  • **发散创新:探索生物神经网络与编程语言的交融**随着生物神经网络研
  • 平台网站开发公司广州安全教育平台登陆
  • 第1章:初识Linux系统——第8节:查看/修改权限控制和ACL
  • Rust所有权机制在Web服务开发中的避坑指南
  • 成都网站开发费用企业网站建设任务书
  • pyhton 螺旋矩阵(指针-矩阵-中等)含源码(二十六)
  • 矩阵的奇异值分解(SVD)在三维图形学中的进阶应用
  • 装饰器加强
  • 17Z一起做网站广州站南阳商都网站做网站
  • MySQL多实例部署实战指南
  • 微网站建设招聘做招聘网站代理商需要多少钱
  • Android 网络变动监听
  • Deep Metric Learning(深度度量学习)
  • 消息队列RabbitMQ、Kafka、ActiveMQ 、Redis、 ZeroMQ、Apache Pulsar对比和如何使用
  • 建网站专用网站标准物质网站建设模板
  • (四)Flutter插件之IOS插件开发
  • 湘潭网站建设 x磐石网络广州网站建设培训学校
  • 织梦做的网站老是被黑国外做美食视频网站有哪些
  • 自动化测试相关使用
  • 做移门图的 网站有哪些做招聘网站需要做什么公司
  • TDengine 数字函数 RADIANS 用户手册
  • 做导航网站赚钱企业网站搜索优化外
  • 网站网页设计公司海南省建设执业中心网站
  • 如何解压一个MacOs PKG 安装包修改内容后重新打包
  • Linux 与 Windows:谁更适合 CLI 模式 AI 编程工具?
  • 深度学习(15)-PyTorch torch.nn 参考手册