QT清单打印程序
1.主要代碼
//customer.h文件 #ifndef CUSTOMER_H #define CUSTOMER_H#include <QObject> #include <string>class Customer : public QObject {Q_OBJECT public:explicit Customer(QObject *parent = nullptr);Customer(const Customer& customer);void setCompanyName(std::string name);void setCompanyContact(std::string contact);void setCompanyContactTel(std::string tel);void operator =(const Customer& customer);std::string getCompanyName();std::string getCompanyContact();std::string getCompanyContactTel();private:std::string m_CompanyName;std::string m_Contact;std::string m_ContactTel; };#endif // CUSTOMER_H //customer.cpp文件 #include "customer.h"Customer::Customer(QObject *parent) : QObject(parent) {this->m_CompanyName = "";this->m_Contact = "";this->m_ContactTel = ""; }void Customer::setCompanyName(std::string name) {m_CompanyName = name; }void Customer::setCompanyContact(std::string contact) {m_Contact = contact; }void Customer::setCompanyContactTel(std::string tel) {m_ContactTel = tel; }void Customer::operator =(const Customer &customer) {this->m_CompanyName = customer.m_CompanyName;this->m_Contact = customer.m_Contact;this->m_ContactTel = customer.m_ContactTel; }std::string Customer::getCompanyName() {return this->m_CompanyName; }std::string Customer::getCompanyContact() {return this->m_Contact; }std::string Customer::getCompanyContactTel() {return this->m_ContactTel; }Customer::Customer(const Customer &customer) {this->m_CompanyName = customer.m_CompanyName;this->m_Contact = customer.m_Contact;this->m_ContactTel = customer.m_ContactTel; } #ifndef GOODDILOG_H #define GOODDILOG_H#include <QDialog> #include <QStandardItem> #include <QList> #include "goods.h"namespace Ui { class GoodDilog; }class GoodDilog : public QDialog {Q_OBJECTpublic:explicit GoodDilog(QWidget *parent = 0);~GoodDilog();QList<QStandardItem*> getGoodsInputParam();QList<QString> getGoodsInput();void setUiParam(Goods& g);private:Ui::GoodDilog *ui; };#endif // GOODDILOG_H #include "gooddilog.h" #include "ui_gooddilog.h"GoodDilog::GoodDilog(QWidget *parent) :QDialog(parent),ui(new Ui::GoodDilog) {ui->setupUi(this); }GoodDilog::~GoodDilog() {delete ui; }QList<QStandardItem *> GoodDilog::getGoodsInputParam() {QList<QStandardItem *> rowList;rowList << new QStandardItem(ui->lineEditName->text()) << new QStandardItem(ui->lineEditType->text())<< new QStandardItem(ui->lineEditUnit->text()) << new QStandardItem(ui->lineEditPrice->text());return rowList; }QList<QString> GoodDilog::getGoodsInput() {QList<QString> rowList;rowList << ui->lineEditName->text() << ui->lineEditType->text()<< ui->lineEditUnit->text() << ui->lineEditPrice->text();return rowList; }void GoodDilog::setUiParam(Goods &g) {ui->lineEditName->setText(QString::fromStdString(g.getGoodsName()));ui->lineEditType->setText(QString::fromStdString(g.getGoodsType()));ui->lineEditUnit->setText(QString::fromStdString(g.getGoodsUnit()));ui->lineEditPrice->setText(QString::fromStdString(std::to_string(g.getGoodsUnitPrice()))); } #ifndef GOODS_H #define GOODS_H#include <QObject> #include <string>class Goods : public QObject {Q_OBJECT public:explicit Goods(QObject *parent = nullptr);Goods(const Goods& goods);void setGoodsName(std::string name);void setGoodsType(std::string type);void setGoodsUnitPrice(double unitprice);void setGoodsUnit(std::string unit);void operator =(const Goods& goods);std::string getGoodsName();std::string getGoodsType();double getGoodsUnitPrice();std::string getGoodsUnit();private:std::string m_GoodsName;std::string m_GoodsType;double m_UnitPrice;std::string m_Unit; };#endif // GOODS_H #include "goods.h"Goods::Goods(QObject *parent) : QObject(parent) {this->m_GoodsName = "";this->m_GoodsType = "";this->m_Unit = "";this->m_UnitPrice = 0.0; }Goods::Goods(const Goods &goods) {this->m_GoodsName = goods.m_GoodsName;this->m_GoodsType = goods.m_GoodsType;this->m_Unit = goods.m_Unit;this->m_UnitPrice = goods.m_UnitPrice; }void Goods::setGoodsName(std::string name) {m_GoodsName = name; }void Goods::setGoodsType(std::string type) {m_GoodsType = type; }void Goods::setGoodsUnitPrice(double unitprice) {m_UnitPrice = unitprice; }void Goods::setGoodsUnit(std::string unit) {m_Unit = unit; }void Goods::operator =(const Goods &goods) {this->m_GoodsName = goods.m_GoodsName;this->m_GoodsType = goods.m_GoodsType;this->m_Unit = goods.m_Unit;this->m_UnitPrice = goods.m_UnitPrice; }std::string Goods::getGoodsName() {return this->m_GoodsName; }std::string Goods::getGoodsType() {return this->m_GoodsType; }double Goods::getGoodsUnitPrice() {return this->m_UnitPrice; }std::string Goods::getGoodsUnit() {return this->m_Unit; } #ifndef TABLEVIEWONLYREAD_H #define TABLEVIEWONLYREAD_H #include <QItemDelegate>class TableViewOnlyRead : public QItemDelegate {Q_OBJECT public:TableViewOnlyRead(QObject *parent = 0): QItemDelegate(parent) { }QWidget *createEditor(QWidget*parent, const QStyleOptionViewItem &option,const QModelIndex &index) const{return NULL;} };#endif // TABLEVIEWONLYREAD_H #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPrinter> #include <QPrintDialog> #include <QPrintPreviewDialog> #include <QPainter> #include <QStandardItemModel> #include <QMenu> #include <QString> #include <QItemDelegate> #include <vector> #include <map> #include <string> #include <algorithm> #include <QDate> #include <QMessageBox> #include "tableviewonlyread.h" #include "customer.h" #include "gooddilog.h" #include "goods.h"namespace Ui { class Widget; }class Widget : public QWidget {Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();//添加列表中的數據和設置布局信息void AddTableViewData();void setTableViewColumnOnlyRead();void setTableViewDataAlignment();//打印表格信息void drawDocHeader(QPainter& Painter);void drawTableAndData(QPainter& Painter);void drawDocTail(QPainter& Painter);//判斷數據是否存在bool isExistence(QString info,QString mode);//更新數據void UpData();void onBtnSave();void setTableStyle();//小寫轉大寫QString LowerToUpper(double money);void ModifyMoney(int row,int column);void ModifySumMoney();private slots:void Preview(QPrinter* print);void PrintPreview();void slotContextMenu(QPoint pos);void SetComboBoxSelctedData(const QString& text);void InsertTableViewRow();void DeleteTableViewRow();void ModifyTableViewRow();void on_BtnSave_clicked();void CalTableData();private:Ui::Widget* ui;QStandardItemModel* model;QMenu* popMenu;std::vector<Goods> m_GoodsArray; //商品信息std::vector<Customer> m_CustomerArray;//客戶信息Customer m_Personal; //個人信息 }; #endif // WIDGET_H #include "widget.h" #include "ui_widget.h"/*** @brief Widget::Widget,構造函數,用于初始化信息* @param parent*/ Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this);//初始化窗口信息this->setWindowTitle("銷售清單打印系統");this->setMaximumSize(1230,660);this->setMinimumSize(1230,660);//創建列表右鍵菜單popMenu = new QMenu(ui->tableView);QAction *InsertRow = new QAction();QAction *DeleteRow = new QAction();QAction *ModifyRow = new QAction();InsertRow -> setText(QString("插入行"));DeleteRow -> setText(QString("刪除行"));ModifyRow -> setText(QString("修改行"));popMenu -> addAction(InsertRow);popMenu -> addAction(DeleteRow);popMenu -> addAction(ModifyRow);model = new QStandardItemModel();//綁定信號和槽connect(ui->BtnPrintPre,SIGNAL(clicked()),this,SLOT(PrintPreview()));//打印預覽connect(ui->tableView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));//TableView右鍵菜單響應connect(ui->comboBoxCompany, SIGNAL(currentIndexChanged(QString)), this, SLOT(SetComboBoxSelctedData(QString)));//下拉列表框響應connect(model,SIGNAL(itemChanged(QStandardItem*)),this,SLOT(CalTableData()));//響應單元格編輯消息//右鍵菜單功能綁定槽connect(InsertRow, SIGNAL(triggered()), this, SLOT(InsertTableViewRow()));connect(DeleteRow, SIGNAL(triggered()), this, SLOT(DeleteTableViewRow()));connect(ModifyRow, SIGNAL(triggered()), this, SLOT(ModifyTableViewRow()));//添加商品數據Goods goods;goods.setGoodsName("面向對象C++程序設計");goods.setGoodsType("必修");goods.setGoodsUnit("本");goods.setGoodsUnitPrice(58.5);this->m_GoodsArray.push_back(goods);Goods goods1;goods1.setGoodsName("面向對象C++程序設計");goods1.setGoodsType("必修");goods1.setGoodsUnit("本");goods1.setGoodsUnitPrice(58.5);this->m_GoodsArray.push_back(goods1);//設置日期ui->dateEdit->setDate(QDate::currentDate());//更新界面控件信息setTableStyle();UpData(); }Widget::~Widget() {delete ui; }/*** @brief Widget::AddTableViewData,表格控件添加行和列,數據*/ void Widget::AddTableViewData() {//添加數據for (int row = 0;row < m_GoodsArray.size();++row){model->setItem(row,0, new QStandardItem(QString::fromStdString(m_GoodsArray[row].getGoodsName())));model->setItem(row,1, new QStandardItem(QString::fromStdString(m_GoodsArray[row].getGoodsType())));model->setItem(row,2, new QStandardItem(QString::fromStdString(m_GoodsArray[row].getGoodsUnit())));model->setItem(row,3, new QStandardItem(QString::fromStdString(std::to_string(m_GoodsArray[row].getGoodsUnitPrice()))));model->setItem(row,4, new QStandardItem(QString("0")));model->setItem(row,5, new QStandardItem(QString("0")));model->setItem(row,6, new QStandardItem(QString("")));}//設置最后一行格式if (m_GoodsArray.size() > 0){model->setItem(m_GoodsArray.size(),0, new QStandardItem(QString("")));model->setItem(m_GoodsArray.size(),1, new QStandardItem(QString("")));model->setItem(m_GoodsArray.size(),2, new QStandardItem(QString("")));model->setItem(m_GoodsArray.size(),3, new QStandardItem(QString("")));ui->tableView->setSpan(m_GoodsArray.size(),0,m_GoodsArray.size(),5);model->setItem(m_GoodsArray.size(), 0, new QStandardItem(QString::fromStdString("合計金額(大寫):")));model->setItem(m_GoodsArray.size(), 5, new QStandardItem(QString::fromStdString("¥")));model->setItem(m_GoodsArray.size(),6, new QStandardItem(QString("")));} }/*** @brief Widget::setTableViewColumnOnlyRead,設置表格指定列為只讀屬性*/ void Widget::setTableViewColumnOnlyRead() {for (int row = 0;row < m_GoodsArray.size();++row){ui->tableView->setItemDelegateForColumn(0, new TableViewOnlyRead);ui->tableView->setItemDelegateForColumn(1, new TableViewOnlyRead);ui->tableView->setItemDelegateForColumn(2, new TableViewOnlyRead);ui->tableView->setItemDelegateForColumn(3, new TableViewOnlyRead);ui->tableView->setItemDelegateForColumn(5, new TableViewOnlyRead);} }/*** @brief Widget::setTableViewDataAlignment,設置TableView表格的數據的布局方式*/ void Widget::setTableViewDataAlignment() {for (int row = 0;row < m_GoodsArray.size();++row){model ->item(row,0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);model ->item(row,1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);model ->item(row,2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);model ->item(row,3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//model ->item(row,4)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//model ->item(row,5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//model ->item(row,6)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);}if (m_GoodsArray.size() > 0){model ->item(m_GoodsArray.size(),0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);model ->item(m_GoodsArray.size(),5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//model ->item(m_GoodsArray.size(),6)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);} }/*** @brief Widget::drawDocHeader,繪制打印文檔頭部區域* @param Painter*/ void Widget::drawDocHeader(QPainter &Painter) {//文檔頭部區域布局參數int x1 = 100,y1 =60;int x2 = 780,y2 =130;//字體設置QFont Font;QFont OldFont = Painter.font();Font.setPointSize(20);Painter.setFont(Font);//繪制個人信息和單號Painter.drawText(x1 + (x2-x1) / 6 ,y1 ,ui->EditPersonalCompanyName->text());Painter.setFont(OldFont);Painter.drawText(x2 - 155,y1 ,"銷售送貨清單:");Font.setPointSize(10);Painter.setFont(Font);Painter.drawText(x2 - 80,y1 ,ui->EditPersonalListID->text());Painter.setFont(OldFont);//繪制客戶信息Painter.drawText(x1,y1 + 40,"客戶名稱:" + ui->comboBoxCompany->currentText());Painter.drawText(x2 - 110,y1 + 40 ,"日 期:" + ui->dateEdit->text());//繪制水平分割線Painter.drawLine(QPointF(x1, y2 -25), QPointF(x2, y2 -25));Painter.drawText(x1, y2 -10,"聯系人:" + ui->EditCustomerContact->text());Painter.drawText(x1 + (x2-x1) / 2 ,y2 -10,"聯系電話:" + ui->EditCustomerContactTel->text()); }/*** @brief Widget::drawTableAndData,繪制打印文檔的表格區域* @param Painter*/ void Widget::drawTableAndData(QPainter& Painter) {//表頭數據QString columnName[] = {"序號","商品名稱","規格型號","單位","單價","數量","金額","備注說明"};//等寬列,列相對于列寬的位置偏移量,用于控制列的寬度int columnWidth[] = {0,-30,30,30,25,20,20,5,0};//行列數int row = 9,col = 8;//表格起點與終點int x1 = 100,y1 = 130;int x2 = 780,y2 =319;//行高列寬int rowHeight = (y2 -y1) / row;int colWidth = (x2-x1) / col;//表格中數據的內邊距int paddingTop = 5;int paddingLeft = 15;for (int i = 0;i <= row;i++){//繪制行Painter.drawLine(QPointF(x1, y1 + i * rowHeight), QPointF(x2, y1 + i * rowHeight));for (int j = 0;j <= col;j++){if (i == 0){//用于控制列的終點,繪制不同長短的列int Type = -1;if (j == 0 || j > 5){Type = 0;}//繪制列Painter.drawLine(QPointF(x1 + j * colWidth + columnWidth[j], y1), QPointF(x1 + j * colWidth + columnWidth[j], y2 + Type * rowHeight));//繪制表頭if (i == 0 && j < col){Painter.drawText(QPointF(x1 + j * colWidth + columnWidth[j] + paddingLeft, y1 + rowHeight / 2 + paddingTop), columnName[j]);}}//繪制數據else if (i >= 1 && i - 1 < m_GoodsArray.size() && i < row -1){QString ColData;//取出數組中的數據switch (j){case 0: ColData = QString::fromStdString(std::to_string(i)); break;case 1: ColData = QString::fromStdString(m_GoodsArray[i-1].getGoodsName()); break;case 2: ColData = QString::fromStdString(m_GoodsArray[i-1].getGoodsType()); break;case 3: ColData = QString::fromStdString(m_GoodsArray[i-1].getGoodsUnit()); break;case 4: ColData = QString::fromStdString(std::to_string(m_GoodsArray[i-1].getGoodsUnitPrice())); break;default: ColData = nullptr; break;}//添加打印表格數據if (ColData != nullptr){Painter.drawText(QPointF(x1 + j * colWidth + columnWidth[j] + paddingLeft, y1 + i * rowHeight + rowHeight / 2 + paddingTop), ColData);}}//處理列表最后一行else if (i == row-1){if (j == 0){Painter.drawText(QPointF(x1 + paddingLeft , y1 + i * rowHeight + rowHeight / 2 + paddingTop),model->item(m_GoodsArray.size(), 0)->text());}else if (j == 6){Painter.drawText(QPointF(x1 + j * colWidth + columnWidth[j] + paddingLeft, y1 + i * rowHeight + rowHeight / 2 + paddingTop), model->item(m_GoodsArray.size(), 6)->text());}}}} }/*** @brief Widget::drawDocTail,設置打印文檔的尾部區域信息* @param Painter*/ void Widget::drawDocTail(QPainter &Painter) {//文檔底部區域布局參數int x1 = 100,y1 = 319;int x2 = 780,y2 =500;Painter.drawText(QPointF(x1 ,y1 +30 ),"送貨單位及經手人(蓋章):");Painter.drawText(QPointF(x1 + (x2-x1) / 3 * 2 ,y1 + 30 ),"收貨單位及經手人(蓋章):");QFont Font;QFont OldFont = Painter.font();Font.setBold(QFont::Black);Painter.setFont(Font);Painter.drawText(QPointF(x1 + (x2-x1) / 4 ,y1 + 70 ),"請核對以上清單,如有問題請在三天之內聯系我們,逾期概不負責!");Painter.setFont(OldFont);Painter.drawText(QPointF(x1 + (x2-x1) / 9 ,y1 + 100 ),"(一)存根:白");Painter.drawText(QPointF(x1 + (x2-x1) / 9 * 4,y1 + 100 ),"(二)客戶:紅");Painter.drawText(QPointF(x1 + (x2-x1) / 9 * 7,y1 + 100 ),"(三)結算:黃");Painter.drawText(QPointF(x2 - 120 ,y1 +130 ),"送貨電話:" + ui->EditPersonalContactTel->text()); }/*** @brief Widget::isExistence,判斷用戶信息是否存在* @param info* @param mode* @return*/ bool Widget::isExistence(QString info, QString mode) {if (mode.toLower() == "p"){if (QString::fromStdString(m_Personal.getCompanyName()) == info)return true;}else if (mode.toLower() == "c"){for (int i=0;i< m_CustomerArray.size();i++){if (QString::fromStdString(m_CustomerArray[i].getCompanyName()) == info)return true;}}return false; }/*** @brief Widget::PrintPreview,打印預覽*/ void Widget::PrintPreview() {//打印預覽設置QPrinter Printer;QPrintPreviewDialog PrintPreview(&Printer,this);connect(&PrintPreview,SIGNAL(paintRequested(QPrinter*)),this,SLOT(Preview(QPrinter*) ) );PrintPreview.exec(); }/*** @brief Widget::Preview,打印預覽,設置紙張大小* @param Printer*/ void Widget::Preview(QPrinter *Printer) {//設置打印紙的大小Printer->setPaperSize(QPrinter::Custom);Printer->setPageSizeMM(QSizeF(241,140));//打印預覽數據設置QPainter Painter;Painter.begin(Printer);drawDocHeader(Painter);drawTableAndData(Painter);drawDocTail(Painter);Painter.end(); }/*** @brief Widget::slotContextMenu,TableView控件響應右鍵菜單槽函數* @param pos*/ void Widget::slotContextMenu(QPoint pos) {//鼠標點擊位置確定,顯示右鍵菜單auto index = ui->tableView->indexAt(pos);if (index.isValid()){popMenu->exec(QCursor::pos());} }/*** @brief Widget::SetComboBoxSelctedData,下拉列表框響應選項改變* @param text*/ void Widget::SetComboBoxSelctedData(const QString& text) {for (int i=0;i<m_CustomerArray.size();++i){if (QString::fromStdString(m_CustomerArray[i].getCompanyName()) == text){ui->EditCustomerContact->setText(QString::fromStdString(m_CustomerArray[i].getCompanyContact()));ui->EditCustomerContactTel->setText(QString::fromStdString(m_CustomerArray[i].getCompanyContactTel()));}} }/*** @brief Widget::InsertTableViewRow,插入行*/ void Widget::InsertTableViewRow() {//獲取選中的行int row = ui->tableView->currentIndex().row();GoodDilog dlg;if(dlg.exec() == QDialog::Accepted){model->insertRow(row, dlg.getGoodsInputParam());if (row >=0){Goods goods;goods.setGoodsName(model->item(row, 0)->text().toStdString());goods.setGoodsType(model->item(row, 1)->text().toStdString());goods.setGoodsUnit(model->item(row, 2)->text().toStdString());goods.setGoodsUnitPrice(atof(model->item(row, 3)->text().toStdString().c_str()));if (row < m_GoodsArray.size()){m_GoodsArray.insert(m_GoodsArray.begin()+ row,goods);}else{m_GoodsArray.push_back(goods);}setTableViewDataAlignment();}} }/*** @brief Widget::DeleteTableViewRow,刪除行*/ void Widget::DeleteTableViewRow() {int index = ui->tableView->currentIndex().row();model->removeRow(index);if ( index >=0 && index < m_GoodsArray.size()){//復制構造函數和重載賦值函數,需要加const,否則在linux中編譯不通過m_GoodsArray.erase(m_GoodsArray.begin() + index);}ModifySumMoney(); }/*** @brief Widget::ModifyTableViewRow,修改行的內容*/ void Widget::ModifyTableViewRow() {int row = ui->tableView->currentIndex().row();if ( row >=0 && row <m_GoodsArray.size()){GoodDilog dlg;dlg.setUiParam(m_GoodsArray[row]);if (dlg.exec()== QDialog::Accepted){if (dlg.getGoodsInputParam().size() == 4){m_GoodsArray[row].setGoodsName(dlg.getGoodsInput().at(0).toStdString());m_GoodsArray[row].setGoodsType(dlg.getGoodsInput().at(1).toStdString());m_GoodsArray[row].setGoodsUnit(dlg.getGoodsInput().at(2).toStdString());m_GoodsArray[row].setGoodsUnitPrice(atof(dlg.getGoodsInput().at(3).toStdString().c_str()));model->setItem(row, 0, new QStandardItem(dlg.getGoodsInput().at(0)));model ->item(row, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);model->setItem(row, 1, new QStandardItem(dlg.getGoodsInput().at(1)));model ->item(row, 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);model->setItem(row, 2, new QStandardItem(dlg.getGoodsInput().at(2)));model ->item(row, 2)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);model->setItem(row, 3, new QStandardItem(dlg.getGoodsInput().at(3)));model ->item(row, 3)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ModifyMoney(row,4);}}} }/*** @brief Widget::UpData,跟新界面控件的信息*/ void Widget::UpData() { // //初始化TableView控件信息,設置屬性 // model->setHorizontalHeaderLabels({"商品名稱","規格型號","單位","單價","數量","金額","備注說明"}); // ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter); // ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu); // ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); // ui->tableView->setModel(model); // //ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);//設置列可與拖動,調整列寬 // ui->tableView->show();//插入數據this->AddTableViewData();this->setTableViewColumnOnlyRead();//設置文本居中顯示this->setTableViewDataAlignment();//設置個人信息ui->EditPersonalCompanyName->setText(QString::fromStdString(m_Personal.getCompanyName()));ui->EditPersonalContactTel->setText(QString::fromStdString(m_Personal.getCompanyContactTel()));//設置列表框QString current = ui->comboBoxCompany->currentText();ui->comboBoxCompany->clear();//添加客戶數據for (int i=0;i<m_CustomerArray.size();++i){ui->comboBoxCompany->addItem(QString::fromStdString(m_CustomerArray[i].getCompanyName()));if (QString::fromStdString(m_CustomerArray[i].getCompanyName()) == current){ui->comboBoxCompany->setCurrentIndex(i);ui->EditCustomerContact->setText(QString::fromStdString(m_CustomerArray[i].getCompanyContact()));ui->EditCustomerContactTel->setText(QString::fromStdString(m_CustomerArray[i].getCompanyContactTel()));}} }/*** @brief Widget::onBtnSave,保存界面左邊相關控件信息*/ void Widget::onBtnSave() {bool isSucc = false;if (!isExistence(ui->comboBoxCompany->currentText(),QString("c"))){Customer customer;customer.setCompanyName(ui->comboBoxCompany->currentText().toStdString());customer.setCompanyContact(ui->EditCustomerContact->text().toStdString());customer.setCompanyContactTel(ui->EditCustomerContactTel->text().toStdString());m_CustomerArray.push_back(customer);isSucc = true;}else{int pos = ui->comboBoxCompany->currentIndex();if (pos >=0 && pos < m_CustomerArray.size()){m_CustomerArray[pos].setCompanyContact(ui->EditCustomerContact->text().toStdString());m_CustomerArray[pos].setCompanyContactTel(ui->EditCustomerContactTel->text().toStdString());isSucc = true;}}if (!isExistence(ui->EditPersonalCompanyName->text(),QString("p"))){m_Personal.setCompanyName(ui->EditPersonalCompanyName->text().toStdString());m_Personal.setCompanyContactTel(ui->EditPersonalContactTel->text().toStdString());isSucc = true;}UpData();if(isSucc)QMessageBox::information(this,tr("提示:"),QStringLiteral("保存成功!"),QMessageBox::Ok);}void Widget::setTableStyle() {//初始化TableView控件信息,設置屬性model->setHorizontalHeaderLabels({"商品名稱","規格型號","單位","單價","數量","金額","備注說明"});ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);ui->tableView->horizontalHeader()->setDefaultAlignment(Qt::AlignCenter);ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu);ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);ui->tableView->setModel(model);//ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);//設置列可與拖動,調整列寬ui->tableView->show(); }/*** @brief Widget::LowerToUpper,小寫金額轉大寫* @param money* @return*/ QString Widget::LowerToUpper(double money) {return QString(""); }void Widget::ModifyMoney(int row, int column) {double money = atof(((model->item(row, column)->text()).toStdString()).c_str()) * m_GoodsArray[row].getGoodsUnitPrice();model->setItem(row, column, new QStandardItem(model->item(row, column)->text()));model ->item(row, column)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);model->setItem(row,column + 1, new QStandardItem(QString::fromStdString(std::to_string(money))));model ->item(row, column + 1)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ModifySumMoney(); }void Widget::ModifySumMoney() {double sum = 0.0;for (int i=0;i<m_GoodsArray.size();i++){sum += atof((model->item(i, 5)->text()).toStdString().c_str());}model->setItem(m_GoodsArray.size(), 5, new QStandardItem(QString("¥") + QString::fromStdString(std::to_string(sum))));model ->item(m_GoodsArray.size(), 5)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);model->setItem(m_GoodsArray.size(), 0, new QStandardItem(QString("合計金額(大寫):") + LowerToUpper(sum)));model ->item(m_GoodsArray.size(), 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); }void Widget::on_BtnSave_clicked() {onBtnSave(); }void Widget::CalTableData() {int column = ui->tableView->currentIndex().column();if ( column == 4){int row = ui->tableView->currentIndex().row();//計算金額if (row >=0 && row <m_GoodsArray.size()){ModifyMoney(row,column);}} } #include "widget.h" #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }2.運行結果
功能還需完善,還不穩定。
總結
- 上一篇: 牛客13592 武藏牌牛奶促销
- 下一篇: 数据库高级知识——查询截取分析(二)