进销存在学习案例中最为常见,当然,也是我们日常生活中比较常用的工具,它的扩展性比较大,比如我们的家庭记账本,个人图书管理,个人杂物管理都可以通过它来进行扩展编写。这里以一个中药药房进销存为设计目标来探索学习QT中sqlite的用法以及QT的项目编程。

一、界面及按钮事件的设计
1、界面设计

2、添加按钮事件为widget添加数据
接下来,为按钮增加事件,在“”添加“”按钮中采用静态的方法向表格中添加内容(QT与微软的产品不同,微软的产品双击为添加事件,而QT则要通过右键菜单的go to slot添加信息槽),如下图:

这里添加的是clicked事件,确定后我们可以在对应的cpp文件中找到它(如果添加错了,要删除的话一定要记得在cpp和头文件中一同删除它,否则运行就会报错):

void MainWindow::on_addBtn_clicked()
{ui->lineEdit->setText(QString("HQ001"));ui->tableWidget->setRowCount(3);                                           //设定行数(否则无法显示单元格内容ui->tableWidget->verticalHeader()->setVisible(false);               // 隐藏水平headerui->tableWidget->setItem(0,0,new QTableWidgetItem("HQ001"));ui->tableWidget->setItem(1,0,new QTableWidgetItem("ZGC01"));ui->tableWidget->setItem(2,0,new QTableWidgetItem("MH001"));
}

上面的代码初步演示了,如何通过UI对象来操作UI界面上的各个控件。下面我们来批量为tableWidget添加数据并显示出来,代码如下:

 ui->lineEdit->setText(QString("HQ001"));mInfo[0] = new medicineListInfo(QString("HQ001"), QString::fromLocal8Bit("黄芪"), QString::fromLocal8Bit("根部"), QString::fromLocal8Bit("云南"),  10, 0.3);mInfo[1] = new medicineListInfo(QString("GC001"), QString::fromLocal8Bit("甘草"), QString::fromLocal8Bit("根部"), QString::fromLocal8Bit("宁夏"), 10,0.07);mInfo[2] = new medicineListInfo(QString("ZR001"), QString::fromLocal8Bit("竹茹"), QString::fromLocal8Bit("其他"), QString::fromLocal8Bit("湖南"),  15,0.45);mInfo[3] = new medicineListInfo(QString("MX001"), QString::fromLocal8Bit("芒硝"), QString::fromLocal8Bit("矿石"), QString::fromLocal8Bit("甘肃"),  21,0.24 );mInfo[4] = new medicineListInfo(QString("ZSW01"), QString::fromLocal8Bit("制首乌"), QString::fromLocal8Bit("根部"),QString::fromLocal8Bit("四川"),  30,0.15);ui->tableWidget->setRowCount(5);for(int i = 0; i < ui->tableWidget->rowCount(); i++) {QTableWidgetItem *item_code = new QTableWidgetItem();item_code->setText(mInfo[i]->mlistInfoCode);item_code->setFlags(item_code->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i, 0, item_code);QTableWidgetItem *item_name = new QTableWidgetItem();item_name->setText(mInfo[i]->mlistInfoName);item_name->setFlags(item_name->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i,1, item_name);QTableWidgetItem *item_class = new QTableWidgetItem();item_class->setText(mInfo[i]->mlistInfoClass);item_class->setFlags(item_class->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i, 2, item_class);QTableWidgetItem *item_mount = new QTableWidgetItem();ui->tableWidget->setItem(i, 3, item_mount);ui->tableWidget->item(i, 3)->setText(mInfo[i]->mlistInfoProductor);QTableWidgetItem *item_productor = new QTableWidgetItem();item_productor->setText(mInfo[i]->mlistInfoProductor);item_productor->setFlags(item_productor->flags() & (~Qt::ItemIsEditable));ui->tableWidget->setItem(i, 4, item_productor);QTableWidgetItem *item_price = new QTableWidgetItem();ui->tableWidget->setItem(i, 5, item_price);ui->tableWidget->item(i, 5)->setText(QString("%1").arg(mInfo[i]->mlistInfoPrice));
...................}


上面完成了数据的静态批量添加,这也为我们实现数据的动态添加奠定了基础。让我们熟悉了表格控件(tableWidget)的使用。

二、设计数据库并加载数据
这里的数据库我们使用文件数据库sqlite,这个不需要安装什么服务就能依靠文件来运行,方便,但如果您需要运行大量的数据就可以选择更强大一些的mysql或者sqlserver,oracle等。 数据库设计我们使用一个简单的sqlite可视化设计工具sqlite studio。


1、数据表格设计如下:

我们向表格中添加数据后,通过QT的自带的sqlite数据引起就可以直接显示出来了。显示数据到tableWdiget中的代码如下:

2、数据库连接须注意的事项

a、在工程文件中设置好sql如下图:

b、数据库路径的设置
在开发调试阶段,数据库文件放置的路径不是在工程文件目录中,应该在调试目录中,如下


许多初学者在这里吃了大亏,总是不能成功连接数据库,所以这里特别提出来。如果我们的确想使用运行路径下的data中的数据库文件,可以这么来使用applicationpath来获取。
最恐怖的是,调试的时候,路径不在工程文件并列的同文件夹而是跑到其他文件夹去了,比如:
C:\Users\Administrator\Documents\build-testSqlite-Desktop_Qt_5_11_0_MinGW_32bit-Debug\debug
所以,我们在实在无法连接数据库的时候,先找找你的调试目录在哪里,我们可以打开QT项目设置看看就知道了:

3、将数据载入tableWidget

代码如下:

void  display(){
//确保数据链接成功if(!createConnection()){QMessageBox::about(NULL, "About", "Fail to connect database!");}model = new QSqlTableModel(this);model->setTable("tbMain"); //与数据库中的表tbMain绑定model->setEditStrategy(QSqlTableModel::OnManualSubmit);model->select();//设置表头model->setHeaderData(0, Qt::Horizontal, QString::fromLocal8Bit( "编号"));model->setHeaderData(1, Qt::Horizontal,  QString::fromLocal8Bit("药名"));model->setHeaderData(2, Qt::Horizontal,  QString::fromLocal8Bit("类别"));model->setHeaderData(3, Qt::Horizontal,  QString::fromLocal8Bit("产地"));model->setHeaderData(4, Qt::Horizontal,  QString::fromLocal8Bit("厂家"));model->setHeaderData(5, Qt::Horizontal,  QString::fromLocal8Bit("价格"));model->setHeaderData(6, Qt::Horizontal,  QString::fromLocal8Bit("剂量"));model->setHeaderData(7, Qt::Horizontal,  QString::fromLocal8Bit("总价"));model->sort(0, Qt::AscendingOrder); // 第0列升序排序//与控件tableView绑定,设置表格宽度ui->tvMain->setModel(model);ui->tvMain->setEditTriggers(QAbstractItemView::NoEditTriggers);   //使其不可编辑ui->tvMain->setColumnWidth(0,80);ui->tvMain->setColumnWidth(1,100);ui->tvMain->setColumnWidth(2,60);ui->tvMain->setColumnWidth(3,100);ui->tvMain->setColumnWidth(4,160);ui->tvMain->setColumnWidth(5,76);ui->tvMain->setColumnWidth(6,76);}static bool createConnection()
{QString dbFileName =".//data//tcmp.db";QSqlDatabase m_db = QSqlDatabase::addDatabase("QSQLITE");m_db.setDatabaseName(dbFileName);if (false == m_db.open()){qDebug() << "Error: Failed to connect database.";return false;}else{qDebug() << "Info: Successed to connect database.";QSqlQuery query;query.exec("create table medicine(id int primary key,药材名 vchar,生产企业 vchar,进货价 int,出货价 vchar,库存 vchar,销量 int)");query.exec("create table sale(id int primary key,药材名 vchar,生产企业 vchar,销量 vchar,日期 vchar)");query.exec("create table product(id int primary key,products vchar)");return true;}
}

这篇博客就到这里,小小进销存的内容后面继续,请继续关注下面的博客。

用QT和sqlite做一个小小的进销存(1)相关推荐

  1. 用专业的一个服装进销存软件「商陆花」做生意!太省事了

    相信开过店的小伙伴们在进销存单.对账单.快递面单.仓库盘点这些一定很头疼吧!而且像之前刷卡的POS机,盘点库存的手持式盘点机一定不陌生,机器多了还容易弄错,机器的价格还贵.但是现在只要你有一部手机以上 ...

  2. 图解分析一个dNet进销存软件

    该源码下载自 http://www.onlinedown.net/soft/43299.htm 首先安装: 看下它的数据库:在sql server 2008中附加: 顺带复习sql server的连接 ...

  3. 进销存软件的价值是多少?它能帮企业做什么?

    进销存软件的价值是多少?我信任咱们每个人都想花最少的钱去买东西,但是咱们怎样知道产品的价格和价值呢? 让咱们在这里了解一下:中小企业自身十分重视公司的本钱,在企业信息化的过程中,我信任很多中小企业一向 ...

  4. 手机进销存系统/供应链管理系统

    花了将近两个月的时间学习了一个企业级进销存项目,已经结束了两周多,现在终于有时间来对这个项目的学习做个总结了! 一.首先介绍下这个项目 (注:本人目前大三,专业为信息管理,与编程沾边不多.而我对编程很 ...

  5. 新智慧记震撼上线,开启进销存管理新时代

    近日,金蝶账无忧旗下免费进销存管理软件--金蝶智慧记正式推出APP重大迭代版本:新智慧记(版本号V4.0),在强化原有进销存管理业务功能基础上,打通资金流水管理,引入工商.记账.信贷.金融等诸多服务, ...

  6. 基于JavaWeb的药品进销存管理系统(JSP)

    目 录 绪论 1 1.1 本课题的研究背景 1 1.2 国内外研究现状 1 1.3 本课题的主要工作 2 1.4 目的和意义 2 开发工具及技术 3 2.1 开发工具 3 2.1.1 MyEclips ...

  7. 广州某皮具公司进销存管理系统需求分析

    前几个月一直在给广州花都狮岭某皮具公司做一款进销存管理系统.本人在其公司做需求分析将近二十几天,感受颇多. 也对皮具行业系统有了较深的理解: 一.物料分类大至为:主料,配料,里布,辅料,露华里,拉链, ...

  8. 基于JAVA+SpringMVC+MYSQL的超市进销存

    项目功能: 采用SprngMVC框架开发的一个超市进销存系统,包括管理员登录,修改头像,修改密码,仓库管理,供应商管理,商品管理,销售管理,订单管理等功能 页面效果:

  9. SSM框架超市进销存出库入库仓库管理系统(idea开发javaweb-javaee-j2ee-springboot) 退货管理 销售管理 供应商管理 客户管理 员工管理 以及库存统计和盘存统计

    0.效果展示 1.概述 2.搭建环境 本文以实现一个超市进销存出库入库仓库管理系统为目标,从环境搭建到编码实现全过程讲述 我们使用javaweb.J2EE来构建超市进销存出库入库仓库管理系统,环境使用 ...

最新文章

  1. 用JS脚本进行页面元素控制
  2. 访问ASP.NET临时文件夹的权限问题
  3. stdthread(7)并发unique_lock
  4. strace 命令详解
  5. Problem F. Grab The Tree HDU - 6324(树形dp+博弈)
  6. 正则去除包裹的大括号
  7. IDEA编译时出现“cannot resolve symbol“的问题时的解决方法。
  8. 派生类的构造复制与析构
  9. python模块整理12-pdb调试模块
  10. 【MMD动作+镜头】Bo Peep Bo Peep
  11. XP侧边栏(XP桌面秀)
  12. 特殊字符保存到SQL数据库的问题
  13. 【整理】详解嵌入式片上资源之SDRAM内存
  14. GPU 编程 CPU 异同点_22年后再战显卡市场 分析师:英特尔GPU不会构成威胁
  15. java成员变量默认是_在Java语言中,String类型的成员变量的默认初始值是( )
  16. Java设计模式总结——6大设计原则
  17. 昊海微信拼团php,最新微信昊海拼团系统独立版源码分享,微信团购关注送红包送优惠卷功能,附说明文档...
  18. m基于PSO粒子群优化的柔性制造系统AGV调度模型matlab仿真
  19. 电信云2020校招-技术笔试题
  20. LearningSpark(5):Spark共享变量理解

热门文章

  1. iFunk S机械键盘游戏本登陆苏宁
  2. 基于阿里云容器镜像服务加速K8S镜像下载
  3. [激光原理与应用-62]:激光器 - 光学 - 怎样测量光斑和光束质量?
  4. 圣诞夜表白代码!看你答不答应
  5. thisis incompatible with sql_mode=only_full_group
  6. 苹果在线签名服务器搭建,苹果iOS企业签名 、apple 超级签名网站服务器选用
  7. Java方法怎么写怎么用
  8. 一套基于模板匹配的语音识别技术。提取语音的特征,并建立模板库,可以将语音识别技术应用于机器人...
  9. java调用windowsAPI初识-简单的文件删除功能
  10. vue 返回刷新页面 不keepAlive