1、第16章 【综合实例】:汽车销售管理系统功能介绍与界面设计功能介绍与界面设计16.116.2实现品牌车管理功能实现品牌车管理功能销售统计图表功能销售统计图表功能16.316.4添加登录界面添加登录界面16.1 16.1 功能介绍与界面设计功能介绍与界面设计16.1.1 功能简介功能简介运行程序后会出现登录界面,需要输入密码才可登录,该功能将在本章的后面进行讲解。进入主界面后有两个菜单:“销售管理”和“修改密码”,在“销售管理”主菜单下有三个子菜单,即“品牌车管理”、“销售统计”和“退出”。选择“销售管理”“品牌车管理”子菜单,进入“品牌车管理”界面,该界面实现了不同厂商不同品牌汽车的管理和出售
2、操作,还显示了当日的销售记录。其中,车辆数据信息使用了数据库进行存储,而销售记录则使用XML文档存储。选择“销售管理”“销售统计”子菜单,进入“销售统计”界面,这个界面上通过自定义视图实现了各款车的销量的图表显示。16.1.2 主界面设计在ToolBox的“出售车辆”页面中添加Label、ComboBox、LineEdit、SpinBox和PushButton等部件,效果如图16.1所示。16.1.2 主界面设计更改部分部件的objectName属性,见表16.1。部 件objectName属性“厂家:”右面的Combo BoxsellFactoryComboBox“品牌:”右面的Combo
3、BoxsellBrandComboBox“报价:”右面的Line EditsellPriceLineEdit“数量:”右面的Spin BoxsellNumSpinBox“剩余数量:000”LabelsellLastNumLabel“金额:”右面的Line EditsellSumLineEdit“确定”Push ButtonsellOkBtn“取消”Push ButtonsellCancelBtn显示日销售清单的List WidgetdailyList16.1.3 菜单设计在文件“widget.h”中添加头文件:#include#include修改Widget的基类为QMainWindow,并添
4、加主菜单、动作Action的定义:classWidget:publicQMainWindowQ_OBJECTpublic:explicitWidget(QWidget*parent=0);Widget();QMenu*manageMenu;/“销售管理”主菜单QMenu*passwordMenu;/“修改密码”主菜单/动作Action定义QAction*manageAction;QAction*chartAction;QAction*quitAction;privateslots:voidon_manageMenu_clicked();/实现“品牌车管理”子菜单功能函数voidon_chart
5、Menu_clicked();/实现“销售统计”子菜单功能函数voidon_quitMenu_clicked();/实现“退出”子菜单功能函数private:Ui:Widget*ui;voidcreateMenuBar();/用于生成菜单栏的函数;16.1.3 菜单设计将Widget类的构造函数修改为:Widget:Widget(QWidget*parent):QMainWindow(parent),ui(newUi:Widget)ui-setupUi(this);setFixedSize(750,500);createMenuBar();/生成菜单栏16.1.3 菜单设计createMenu
6、Bar()函数用于生成菜单栏,代码如下:voidWidget:createMenuBar()manageAction=newQAction(tr(品牌车管理),this);chartAction=newQAction(tr(销售统计),this);quitAction=newQAction(tr(退出),this);manageAction-setShortcut(tr(Ctrl+M);chartAction-setShortcut(tr(Ctrl+C);quitAction-setShortcut(tr(Ctrl+Q);manageMenu=menuBar()-addMenu(tr(销售管理
7、);manageMenu-addAction(manageAction);manageMenu-addAction(chartAction);manageMenu-addSeparator();manageMenu-addAction(quitAction);passwordMenu=menuBar()-addMenu(tr(修改密码);connect(manageAction,SIGNAL(triggered(),this,SLOT(on_manageMenu_clicked();connect(chartAction,SIGNAL(triggered(),this,SLOT(on_char
8、tMenu_clicked();connect(quitAction,SIGNAL(triggered(),this,SLOT(on_quitMenu_clicked();16.1.3 菜单设计最后三行connect()函数代码为操作菜单的功能函数添加事件关联,这三个函数的实现代码如下:voidWidget:on_manageMenu_clicked()ui-stackedWidget-setCurrentIndex(0);voidWidget:on_chartMenu_clicked()ui-stackedWidget-setCurrentIndex(1);voidWidget:on_qui
9、tMenu_clicked()this-close();运行程序,菜单设计效果如图16.2所示。16.2 16.2 实现品牌车管理功能实现品牌车管理功能16.2.1 出售车辆出售车辆1创建厂家表(创建厂家表(factory)和品牌表()和品牌表(brand)首先创建两张表,在前面项目的基础上进行。因为在程序中要使用QtSql和QtXml模块,所以在项目文件“manager.Pro”中添加如下代码:QT+=sqlxml向项目中添加新的C+头文件“connection.h”,完成后将其内容更改。16.2.1 出售车辆2加载厂家名称加载厂家名称下面进入“main.cpp”文件,添加头文件:#incl
10、udeconnection.h在主函数中第一行代码的下面添加如下代码:if(!createConnection()return0;16.2.1 出售车辆下面进入“widget.cpp”文件,添加相关的头文件包含。在构造函数中添加如下代码:setFixedSize(750,500);ui-stackedWidget-setCurrentIndex(0);QSqlQueryModel*factoryModel=newQSqlQueryModel(this);factoryModel-setQuery(selectnamefromfactory);ui-sellFactoryComboBox-set
11、Model(factoryModel);QSplitter*splitter=newQSplitter(ui-managePage);splitter-resize(700,360);splitter-move(0,50);splitter-addWidget(ui-toolBox);splitter-addWidget(ui-dailyList);splitter-setStretchFactor(0,1);splitter-setStretchFactor(1,1);16.2.1 出售车辆这里首先固定了窗口的大小,然后使用factory表的name字段为“厂家”组合框提供条目,最后对too
12、lBox和dailyList两个部件进行布局。现在可以运行程序,将发现“厂家”组合框中已经可以显示三家汽车生产商了,如图16.3所示。16.2.1 出售车辆3加载某厂家对应的品牌名加载某厂家对应的品牌名若在“厂家”组合框中选择任意一家,则应在下面的品牌组合框中显示相应厂商生产的所有品牌的汽车。为了实现这个功能,需要从设计模式进入sellFactoryComboBox部件的currentIndexChanged(QString)信号对应的槽,添加如下代码:voidWidget:on_sellFactoryComboBox_currentIndexChanged(constQString&arg1
13、)if(arg1=请选择厂家)/进行其他部件的状态设置on_sellCancelBtn_clicked();elseui-sellBrandComboBox-setEnabled(true);QSqlQueryModel*model=newQSqlQueryModel(this);model-setQuery(QString(selectnamefrombrandwherefactory=%1).arg(arg1);ui-sellBrandComboBox-setModel(model);ui-sellCancelBtn-setEnabled(true);16.2.1 出售车辆现在运行程序,如
14、选择“一汽大众”,这时“品牌”组合框中显示一汽大众生产的全部四个品牌汽车,如图16.4所示。16.2.1 出售车辆4加载某品牌的报价和数量加载某品牌的报价和数量当选择了品牌后需要自动在下方的“报价”和“数量”栏显示相应的信息。从设计模式进入sellBrandComboBox部件的currentIndexChanged(QString)信号对应的槽,添加代码。运行程序,效果如图16.5所示。16.2.1 出售车辆5显示购车总价显示购车总价更改购买数量后会自动显示总的金额。从设计模式进入sellNumSpinBox部件的valueChanged(int)信号对应的槽,添加如下代码:voidWidg
15、et:on_sellNumSpinBox_valueChanged(intarg1)if(arg1=0)ui-sellSumLineEdit-clear();ui-sellSumLineEdit-setEnabled(false);ui-sellOkBtn-setEnabled(false);elseui-sellSumLineEdit-setEnabled(true);ui-sellSumLineEdit-setReadOnly(true);qrealsum=arg1*ui-sellPriceLineEdit-text().toInt();ui-sellSumLineEdit-setText
16、(QString:number(sum);ui-sellOkBtn-setEnabled(true);16.2.1 出售车辆这里首先获取了单价和购买数量,然后计算出总价,进行显示,程序运行效果如图16.6所示。16.2.1 出售车辆6实现购车实现购车从设计模式进入“取消”按钮的单击信号所对应的槽,更改如下:voidWidget:on_sellCancelBtn_clicked()ui-sellFactoryComboBox-setCurrentIndex(0);ui-sellBrandComboBox-clear();这里对各个部件进行了初始化设置。返回到前面的on_sellFactoryComboBox_currentIndexChanged()槽中,在“进行其他部件的状态设置”注释的地方添加该槽的调用:on_sellCancelBtn_clicked();在构造函数末尾也添加该槽的调用,用于初始化界面。进入“确定”按钮的单击信号所对应的槽,更改为。16.2.2 日销售清单汽车的销售记录使用XML文档保存,而在ListWidget中只显示当日的销售记录。在该XML文档中按日期和时间存
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1