Qt5.9.2+vs2013
软件截图:
1.登录
2.主页面
a)【用户管理】页面是为了更好管理用户,拥有最高权限的用户可看到所有用户以及密码,普通用户只可以看见自己的密码,其他用户密码均显示***,另外点击右上角用户名可实现切换用户。
b)【客户管理】页面是为了让用户更好的管理客户的联系信息,可实现增删改查以及导出成表格。然后就是按照检索类型进行实时显示数据。
c)【商品管理】按照检索类型显示不同的数据以及将商品信息导出到excel中。
源码简介:
主函数部分 main.cpp:
#include "StewardSoft.h"
#include <QtWidgets/QApplication>
#include <QSqlDatabase>
#include <QSqlError>
#include <QSqlQuery>
#include <qDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
StewardSoft w;
loginPage *m_loginPage = new loginPage;
m_loginPage->exec();
if (m_loginPage->login_flag == true) //login_flag判断是否登录了
{
m_loginPage->close();
w.username = m_loginPage->m_userName;
w.userPrivilege = m_loginPage->m_privilege;
UserManageChangeInfo::getInstance()->currentUserPrivilege = m_loginPage->m_privilege;
qDebug() << "current user is: " << m_loginPage->m_userName;
qDebug() << "current user privilege is: " << UserManageChangeInfo::getInstance()->currentUserPrivilege;
//w.ui.menuadmin->setTitle(m_loginPage->m_userName);
w.ui.loginUserBtn->setText(m_loginPage->m_userName);
//w.show();
return a.exec();
}
if (m_loginPage->login_flag == false && m_loginPage->close_flag == true)
{
a.quit();
}
}
2.登录后主页面 StewardSoft.cpp
#include "StewardSoft.h"
#include <QList>
#include <QTableWidgetItem>
#include <QSqlRecord>
#include <QTableWidget>
#include <QMessageBox>
#include <QDesktopWidget>
#include <QClipboard>
#include <QTableView>
#include <QTime>
#include "delegate.h"
#define tr QString::fromLocal8Bit
extern struct TableInfo;
StewardSoft* StewardSoft::instance = NULL;
StewardSoft::StewardSoft(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//无边框
setWindowFlags(Qt::FramelessWindowHint);
mLocation = this->geometry();
mIsMax = false;
mDrag = false;
ui.mainTtile->installEventFilter(this);
QIcon icon;
icon.addFile("./img/appico.png");
this->setWindowIcon(icon);
//@test
this->setMouseTracking(true);
_isleftpressed = false;
_curpos = 0;//标记鼠标左击时的位置
//this->setMinimumSize(900, 600);//设置最小尺寸
//@end
ui.user_manage_privilege_LE->setValidator(new QIntValidator(1, 5, this));
ui.userManageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //平均分配列宽
ui.customerManageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //平均分配列宽
ui.commodityManageTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //平均分配列宽
userManageChangeInfo = new UserManageChangeInfo; //用户管理
customerChangeInfo = new ChangeContent; //客户管理
commmodityManagechangeInfo = new commmodityManageChangeInfo; //商品管理
//添加登录用户到menu上
exitAction = new QAction;
exitAction->setText(tr("切换用户"));
/*QAction *changePwd = new QAction;
changePwd->setText(tr("修改密码"));*/
menu = new QMenu;
//menu->setTitle("123");
menu->addAction(exitAction);
//menu->setFixedWidth(40);
//menu->setMaximumWidth(50);
//menu->addAction(changePwd);
QString menuStyle = "\
QMenu{\
background-color: rgb(0,97,136); /* sets background of the menu 设置整个菜单区域的背景色,我用的是白色:white*/\
border: 1px solid rgb(0,97,136);/*整个菜单区域的边框粗细、样式、颜色*/\
color: #F0F0F0;\
}\
QMenuBar{\
background-color: #F0F0F0; /* sets background of the menu 设置整个菜单区域的背景色,我用的是白色:white*/\
border: 1px solid rgb(0,97,136);\
}\
QMenuBar::item:selected{\
background-color: rgb(0, 115, 168);\
color:#F0F0F0;\
font-size:12px;\
}\
QMenu::item{\
background-color: rgb(0,97,136);\
padding:8px 18px;/*设置菜单项文字上下和左右的内边距,效果就是菜单中的条目左右上下有了间隔*/\
margin:0px 0px;/*设置菜单项的外边距*/\
border-bottom:1px solid rgb(0,97,136);/*为菜单项之间添加横线间隔*/\
}\
QMenu::item:selected{\
color: white;\
background-color: qlineargradient(spread : pad, x1 : 0, y1 : 1, x2 : 0, y2 : 0, stop : 0 rgb(25, 134, 199, 0), stop : 1 #5CACEE);/*这一句是设置菜单项鼠标经过选中的样式*/\
font-size:12px;\
}";
menu->setStyleSheet(menuStyle);
ui.loginUserBtn->setMenu(menu);
if (username != NULL)
{
//ui.menuadmin->setTitle(username);
ui.loginUserBtn->setText(username);
}
// 创建菜单项
action_delete = new QAction(this);
action_modification = new QAction(this);
action_copy = new QAction(this);
action_add = new QAction(this);
//model测试
//ui.tableView->setEditTriggers(QAbstractItemView::AllEditTriggers);
CheckBoxDelegate *pCheckItem = new CheckBoxDelegate(this);
myModel = new MyModel(20, 4, this);
ui.tableView->setItemDelegateForColumn(3, pCheckItem);
QStringList headList;
headList << "name" << "dsname" << "do" << "check";
myModel->setHeaderData(headList);
ui.tableView->setModel(myModel);
ui.tableView->horizontalHeader()->setStretchLastSection(true);
//@end
actions();
connect(action_delete, SIGNAL(triggered(bool)), this, SLOT(actionDeleteClick())); //右键动作槽
connect(action_modification, SIGNAL(triggered(bool)), this, SLOT(actionModificationClick())); //右键动作槽
connect(action_copy, SIGNAL(triggered(bool)), this, SLOT(actionCopyClick())); //右键动作槽
connect(action_add, SIGNAL(triggered(bool)), this, SLOT(actionAddClick())); //右键动作槽
connect(userManageChangeInfo, SIGNAL(UpdateUserManageTable()), this, SLOT(UpdateUserManageInfo()));//更新信息
connect(customerChangeInfo, SIGNAL(UpdateCustomerManageTable()), this, SLOT(UpdateUserManageInfo()));
connect(commmodityManagechangeInfo, SIGNAL(UpdatecommodityManageTable()), this, SLOT(UpdateUserManageInfo()));
connect(ui.customerManageEXportDataBtn, SIGNAL(clicked()), this, SLOT(exportDataToExcel()));//导出信息到excel表格
connect(ui.searchContentExportDataBtn, SIGNAL(clicked()), this, SLOT(exportDataToExcel()));
connect(ui.addDataBtn, SIGNAL(clicked()), this, SLOT(on_addDataBtn_clicked()));
connect(exitAction, SIGNAL(triggered()), this, SLOT(exitCurrentUser()));
if (ui.commodityManageTable != NULL)
{
TableInit("commodity", ui.commodityManageTable);
}
if (ui.userManageTable)
{
TableInit("user", ui.userManageTable);
}
if (ui.customerManageTable)
{
TableInit("customer", ui.customerManageTable);
}
qDebug() << tr("当前用户权限等级:") << loginPage::getInstance()->m_privilege;
//@处理鼠标移动行的颜色变化
lastRowBKColor = QColor(0x00, 0xff, 0x00, 0x00);//透明颜色
previousColorRow = -1;
connect(ui.userManageTable, SIGNAL(cellEntered(int, int)), this, SLOT(mycellEntered(int, int)));
connect(ui.customerManageTable, SIGNAL(cellEntered(int, int)), this, SLOT(mycellEntered(int, int)));
//@end
}
StewardSoft::~StewardSoft()
{
}
void StewardSoft::Table2ExcelByHtml(QTableWidget *table, QString title)
{
qDebug() << "-------this is: " << title << " ," << table->rowCount();
QString fileName = QFileDialog::getSaveFileName(table, "保存", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), tr("Excel 文件(*.xls *.xlsx)"));
if (fileName != "")
{
QAxObject *excel = new QAxObject;
if (excel->setControl("Excel.Application")) //连接Excel控件
{
excel->dynamicCall("SetVisible (bool Visible)", "false");//不显示窗体
excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
workbooks->dynamicCall("Add");//新建一个工作簿
QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);
int i, j;
//QTablewidget 获取数据的列数
int colcount = table->columnCount();
//QTablewidget 获取数据的行数
int rowscount = table->rowCount();
//QTableView 获取列数
//int colount=ui->tableview->model->columnCount();
//QTableView 获取行数
//int rowcount=ui->tableview->model->rowCount();
QAxObject *cell, *col;
//标题行
cell = worksheet->querySubObject("Cells(int,int)", 1, 1);
cell->dynamicCall("SetValue(const QString&)", title);
cell->querySubObject("Font")->setProperty("Size", 18);
//调整行高
worksheet->querySubObject("Range(const QString&)", "1:1")->setProperty("RowHeight", 30);
//合并标题行
QString cellTitle;
cellTitle.append("A1:");
cellTitle.append(QChar(colcount - 1 + 'A'));
cellTitle.append(QString::number(1));
QAxObject *range = worksheet->querySubObject("Range(const QString&)", cellTitle);
range->setProperty("WrapText", true);
range->setProperty("MergeCells", true);
range->setProperty("HorizontalAlignment", -4108);//xlCenter
range->setProperty("VerticalAlignment", -4108);//xlCenter
//列标题
for (i = 0; i < colcount; i++)
{
QString columnName;
columnName.append(QChar(i + 'A'));
columnName.append(":");
columnName.append(QChar(i + 'A'));
col = worksheet->querySubObject("Columns(const QString&)", columnName);
col->setProperty("ColumnWidth", table->columnWidth(i) / 6);
cell = worksheet->querySubObject("Cells(int,int)", 2, i + 1);
//QTableWidget 获取表格头部文字信息
columnName = table->horizontalHeaderItem(i)->text();
//QTableView 获取表格头部文字信息
// columnName=ui->tableView_right->model()->headerData(i,Qt::Horizontal,Qt::DisplayRole).toString();
cell->dynamicCall("SetValue(const QString&)", columnName);
cell->querySubObject("Font")->setProperty("Bold", true);
cell->querySubObject("Interior")->setProperty("Color", QColor(191, 191, 191));
cell->setProperty("HorizontalAlignment", -4108);//xlCenter
cell->setProperty("VerticalAlignment", -4108);//xlCenter
}
//数据区
//QTableWidget 获取表格数据部分
for (i = 0; i < rowscount; i++)
{
for (j = 0; j < colcount; j++)
{
worksheet->querySubObject("Cells(int,int)", i + 3, j + 1)->dynamicCall("SetValue(const QString&)", table->item(i, j) ? table->item(i, j)->text() : "");
}
}
//QTableView 获取表格数据部分
// for(i=0;i<rowcount;i++) //行数
// {
// for (j=0;j<colcount;j++) //列数
// {
// QModelIndex index = ui->tableView_right->model()->index(i, j);
// QString strdata=ui->tableView_right->model()->data(index).toString();
// worksheet->querySubObject("Cells(int,int)", i+3, j+1)->dynamicCall("SetValue(const QString&)", strdata);
// }
// }
//画框线
QString lrange;
lrange.append("A2:");
lrange.append(colcount - 1 + 'A');
lrange.append(QString::number(table->rowCount() + 2));
range = worksheet->querySubObject("Range(const QString&)", lrange);
range->querySubObject("Borders")->setProperty("LineStyle", QString::number(1));
range->querySubObject("Borders")->setProperty("Color", QColor(0, 0, 0));
//调整数据区行高
QString rowsName;
rowsName.append("2:");
rowsName.append(QString::number(table->rowCount() + 2));
range = worksheet->querySubObject("Range(const QString&)", rowsName);
range->setProperty("RowHeight", 20);
workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(fileName));//保存至fileName
workbook->dynamicCall("Close()");//关闭工作簿
excel->dynamicCall("Quit()");//关闭excel
delete excel;
excel = NULL;
if (QMessageBox::question(NULL, tr("完成"), tr("文件已经导出,是否现在打开?"), QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
{
QDesktopServices::openUrl(QUrl("file:///" + QDir::toNativeSeparators(fileName)));
}
}
else
{
QMessageBox::warning(NULL, tr("错误"), tr("未能创建 Excel 对象,请安装 Microsoft Excel。"), QMessageBox::Apply);
}
}
}
StewardSoft* StewardSoft::getInstance()
{
if (instance == NULL)
{
instance = new StewardSoft();
}
return instance;
}
//menubar监听
void StewardSoft::on_menuBar_triggered(QAction *action)
{
qDebug() << QString::fromLocal8Bit("menubar当前点击的是:") << action->text();
if (action->text().toStdString().compare("exit") == 0)
{
loginPage *m_loginPage = new loginPage;
m_loginPage->show();
this->close();
qDebug() << "mainWindow is visible: " << this->isVisible();
}
}
void StewardSoft::exitCurrentUser()
{
qDebug() << "退出当前用户";
loginPage *m_loginPage = new loginPage;
m_loginPage->show();
this->close();
qDebug() << "mainWindow is visible: " << this->isVisible();
}
void StewardSoft::on_userManageAddBtn_clicked()
{
qDebug() << tr("新增的用户赋予的:") << ui.user_manage_privilege_LE->text().toInt();
QString msg = tr("您输入的权限必须小于等于登陆者权限!\n登陆者权限为:") + QString::number(userPrivilege);
qDebug() << tr("登录用户权限:") << msg;
if (ui.user_manage_privilege_LE->text().toInt() < userPrivilege)
{
QToolTip::showText(ui.user_manage_privilege_LE->mapToGlobal(QPoint(100, 0)), msg);
return;
}
if (ui.user_manage_username_LE->text() == "")
{
QToolTip::showText(ui.user_manage_username_LE->mapToGlobal(QPoint(100, 0)), tr("您输入的账户为空!"));
return;
}
if (ui.user_manage_pwd_LE->text() == "")
{
QToolTip::showText(ui.user_manage_pwd_LE->mapToGlobal(QPoint(100, 0)), tr("您输入的密码为空!"));
return;
}
if (ui.user_manage_privilege_LE->text() == "")
{
QToolTip::showText(ui.user_manage_privilege_LE->mapToGlobal(QPoint(100, 0)), tr("您输入的权限等级为空!"));
return;
}
QString currentTableName = ui.mainTab->tabText(ui.mainTab->currentIndex());
if (currentTableName == tr("用户管理"))
{
currentTableName = "user";
}
QString user_manage_username = ui.user_manage_username_LE->text();
QString user_manage_pwd = ui.user_manage_pwd_LE->text();
QString user_manage_privilege = ui.user_manage_privilege_LE->text();
QString creator = ui.loginUserBtn->text();
qDebug() << "user name:" << user_manage_username << "pwd:" << user_manage_pwd;
QList<QString> valueList;
valueList.append(user_manage_username);
valueList.append(user_manage_pwd);
valueList.append(user_manage_privilege);
valueList.append(creator);
TableInsert(currentTableName, valueList);
}
//客户管理按钮添加新客户信息
void StewardSoft::on_customerManageAddBtn_clicked()
{
QString currentTableName = ui.mainTab->tabText(ui.mainTab->currentIndex());
if (currentTableName == tr("客户管理"))
{
currentTableName = "customer";
}
QString customerName = ui.customerManageNameLE->text();
QString customerContact = ui.customerManageContactLE->text();
QString customerArea = ui.customerManageAreaLE->text();
QString customerElseInfo = ui.customerManageElseInfoTE->toPlainText();
qDebug() << "currentTableName:" << currentTableName << ",customerName:" << customerName << ",customerContact:" << customerContact << ",customerArea:" << customerArea << ",customerElseInfo:" << customerElseInfo;
if (customerName == "" || customerContact == "")
{
QMessageBox::warning(NULL, tr("警告"), tr("客户姓名为空或联系方式为空!"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
return;
}
QList<QString> valueList;
valueList.append(customerName);
valueList.append(customerContact);
valueList.append(customerArea);
valueList.append(customerElseInfo);
TableInsert(currentTableName, valueList);
}
//表查询
void StewardSoft::TableQuery(QTableWidget *tablewidget, QString queryType, QString tableName, QString condition)
{
//建立并打开数据库
QSqlDatabase database;
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("MyDataBase.db");
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
qDebug() << "Succeed to connect database.";
}
QSqlQuery sql_query(database);
int newTableRowCount = 0;
int sqlResultCount = 0;
//查询所有数据
sql_query.prepare("select * from " + tableName + " where " + queryType + " like '" + condition + "%'");
if (!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
newTableRowCount = queryRowCount(sql_query);
qDebug() << "sql_query size: " << newTableRowCount;
tablewidget->setRowCount(newTableRowCount);
while (sql_query.next())
{
QString userName = sql_query.value(0).toString();
QString userPwd = sql_query.value(1).toString();
QString privilege = sql_query.value(2).toString();
QString creator = sql_query.value(3).toString();
qDebug() << QString("name:%1 password:%2 privilege:%3 creator:%4").arg(userName).arg(userPwd).arg(privilege).arg(creator);
QList<QString> *list = new QList<QString>;
list->append(userName);
list->append(userPwd);
list->append(privilege);
list->append(creator);
for (int i = 0; i < list->size(); i++)
{
QTableWidgetItem *item = new QTableWidgetItem();
item->setTextAlignment(Qt::AlignCenter);
item->setText(list->at(i));
//if (i == 1)
//{
// /*qDebug() << "sqlResultCount: " << sqlResultCount << " ,i : " << i;
// QPushButton *showPwd = new QPushButton;
// showPwd->setText(tr("显示密码"));
// ui.user_manage_table->setCellWidget(sqlResultCount, 1, showPwd);*/
// item->setText("******");
// ui.user_manage_table->setItem(sqlResultCount, i, item);
//}
//else
//{
// ui.user_manage_table->setItem(sqlResultCount, i, item);
//}
tablewidget->setItem(sqlResultCount, i, item);
}
sqlResultCount++;
}
}
//关闭数据库
database.close();
}
//商品管理检索
void StewardSoft::on_searchContentSerchBtn_clicked()
{
QString serachTypeComboBoxText = ui.commodityManageserachTypeCB->currentText();
QTableWidget *currentTableWidget = ui.commodityManageTable;
QString condition = ui.searchContentLE->text();
qDebug() << tr("当前检索类型:") << serachTypeComboBoxText;
if (serachTypeComboBoxText.compare(tr("名称")) == 0)
{
serachTypeComboBoxText = "commodityName";
}
if (serachTypeComboBoxText.compare(tr("设备号")) == 0)
{
serachTypeComboBoxText = "commodityEquitmentNumber";
}
if (serachTypeComboBoxText.compare(tr("属性")) == 0)
{
serachTypeComboBoxText = "commodityProperty";
}
if (serachTypeComboBoxText.compare(tr("备注")) == 0)
{
serachTypeComboBoxText = "commodityElseInfo";
}
TableQuery(currentTableWidget, serachTypeComboBoxText, "commodity", condition);
}
//检索内容输入内容监听
void StewardSoft::on_searchContentLE_textChanged(const QString &text)
{
qDebug() << tr("当前输入的条件是:") << text;
on_searchContentSerchBtn_clicked();
}
//检索类型变化监听
void StewardSoft::on_commodityManageserachTypeCB_currentTextChanged(const QString &text)
{
qDebug() << tr("当前输入的条件是:") << text;
on_searchContentSerchBtn_clicked();
}
void StewardSoft::on_customerManageSearchTypeCB_currentTextChanged(const QString &text)
{
qDebug() << tr("当前输入的条件是:") << text;
on_customerManageSearchBtn_clicked();
}
void StewardSoft::on_customerManageSearchContent_textChanged(const QString &text)
{
qDebug() << tr("当前输入的条件是:") << text;
on_customerManageSearchBtn_clicked();
}
void StewardSoft::on_customerManageSearchBtn_clicked()
{
QString serachTypeComboBoxText = ui.customerManageSearchTypeCB->currentText();
QTableWidget *currentTableWidget = ui.customerManageTable;
QString condition = ui.customerManageSearchContent->text();
qDebug() << tr("当前检索类型:") << serachTypeComboBoxText;
if (serachTypeComboBoxText.compare(tr("姓名")) == 0)
{
serachTypeComboBoxText = "CustomerName";
}
if (serachTypeComboBoxText.compare(tr("联系方式")) == 0)
{
serachTypeComboBoxText = "CustomerPhone";
}
if (serachTypeComboBoxText.compare(tr("地区")) == 0)
{
serachTypeComboBoxText = "Area";
}
if (serachTypeComboBoxText.compare(tr("备注")) == 0)
{
serachTypeComboBoxText = "ElseInfo";
}
TableQuery(currentTableWidget, serachTypeComboBoxText, "customer", condition);
}
void StewardSoft::on_mainTab_tabBarClicked(int index)
{
//qDebug() << "current tab is : " << index << "tab name: " << ui.mainTab->tabText(index) << ui.mainTab->tabText(index).compare(QString::fromLocal8Bit("客户管理"));
if (ui.mainTab->tabText(index).compare(QString::fromLocal8Bit("用户管理")) == 0)
{
TableInit("user", ui.userManageTable);
}
if (ui.mainTab->tabText(index).compare(QString::fromLocal8Bit("客户管理")) == 0)
{
TableInit("customer",ui.customerManageTable);
}
if (ui.mainTab->tabText(index).compare(QString::fromLocal8Bit("商品管理")) == 0)
{
TableInit("commodity", ui.commodityManageTable);
}
}
void StewardSoft::findTableNullLine()
{
ui.userManageTable->rowCount();
}
//获取列
int StewardSoft::queryColumnCount(QSqlQuery query)
{
QSqlRecord sqlRecord = query.record();
return sqlRecord.count();
}
//获取行
int StewardSoft::queryRowCount(QSqlQuery query)
{
int initialPos = query.at();
// Very strange but for no records .at() returns -2
int pos = 0;
if (query.last()){
pos = query.at() + 1;
}
else{
pos = 0;
}
// Important to restore initial pos
query.seek(initialPos);
return pos;
}
void StewardSoft::TableInit(QString tableName ,QTableWidget *tabWidget)
{
//建立并打开数据库
QSqlDatabase database;
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("MyDataBase.db");
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
qDebug() << "Succeed to connect database.";
}
QSqlQuery sql_query(database);
int newTableRowCount = 0;
int sqlResultCount = 0;
//查询所有数据
sql_query.prepare("select * from " + tableName);
if (!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
newTableRowCount = queryRowCount(sql_query);
qDebug() << "sql_query size: " << newTableRowCount;
tabWidget->setRowCount(newTableRowCount);
while (sql_query.next())
{
QString userName = sql_query.value(0).toString();
QString userPwd = sql_query.value(1).toString();
QString privilege = sql_query.value(2).toString();
QString creator = sql_query.value(3).toString();
qDebug() << QString("one:%1 two:%2 three:%3 four:%4").arg(userName).arg(userPwd).arg(privilege).arg(creator);
QList<QString> *list = new QList<QString>;
list->append(userName);
if (userPrivilege == 1 && tableName.compare("user") == 0)
{
list->append(userPwd);
}
else if (userPrivilege != 1 && tableName.compare("user") == 0)
{
list->append("****");
}
else
{
list->append(userPwd);
}
list->append(privilege);
list->append(creator);
for (int i = 0; i < list->size(); i++)
{
QTableWidgetItem *item = new QTableWidgetItem();
item->setTextAlignment(Qt::AlignCenter);
item->setText(list->at(i));
//if (i == 1)
//{
// /*qDebug() << "sqlResultCount: " << sqlResultCount << " ,i : " << i;
// QPushButton *showPwd = new QPushButton;
// showPwd->setText(tr("显示密码"));
// ui.user_manage_table->setCellWidget(sqlResultCount, 1, showPwd);*/
// item->setText("******");
// ui.user_manage_table->setItem(sqlResultCount, i, item);
//}
//else
//{
// ui.user_manage_table->setItem(sqlResultCount, i, item);
//}
tabWidget->setItem(sqlResultCount, i, item);
}
sqlResultCount++;
}
}
//关闭数据库
database.close();
}
//customer表和user表的添加
void StewardSoft::TableInsert(QString tableName, QList<QString> valueList)
{
qDebug() << tr("表名:") << tableName << tr("内容个数:") << valueList.size();
for (QString value : valueList)
{
qDebug() << tr("值:") << value;
}
//建立并打开数据库
QSqlDatabase database;
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("MyDataBase.db");
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
qDebug() << "Succeed to connect database.";
}
QSqlQuery sql_query(database);
//插入数据
QString s = "insert into " + tableName +" values (?,?,?,?)";
qDebug() << "sql query:" << s;
sql_query.prepare(s);
for (QString value : valueList)
{
qDebug() << "---" << value;
sql_query.addBindValue(value);
}
if (!sql_query.exec())
{
qDebug() << sql_query.lastError();
QMessageBox::warning(NULL, tr("警告"), tr("信息重复,请检查添加信息唯一性"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
}
else
{
qDebug() << "insert success";
//查询所有数据
if (tableName == "user")
{
TableInit(tableName, ui.userManageTable);
}
if (tableName == "customer")
{
TableInit(tableName, ui.customerManageTable);
}
}
if (sql_query.next() == false)
{
qDebug() << "return null:" << sql_query.next();
}
//关闭数据库
database.close();
}
void StewardSoft::update_menuBar_value(QString name)
{
username = name;
qDebug() << "--- user name : " << name;
if (username != NULL)
{
//ui.menuadmin->setTitle(username);
ui.loginUserBtn->setText(username);
menu->setTitle(username);
}
}
void StewardSoft::createActions()
{
//设置快捷键
action_flush->setShortcut(QKeySequence::Refresh);
}
void StewardSoft::contextMenuEvent(QContextMenuEvent *event)
{
//当前点击的表格
QString currentTableName = ui.mainTab->tabText(ui.mainTab->currentIndex());
QPoint manageTablePos;
QRect rect;
qDebug() << tr("当前表名:") << currentTableName;
if (currentTableName.compare(tr("用户管理")) == 0)
{
manageTablePos = ui.userManageTable->mapFromGlobal(event->globalPos());
QRect rect1(QPoint(0, 0), ui.userManageTable->size());
rect = rect1;
}
if (currentTableName.compare(tr("客户管理")) == 0)
{
manageTablePos = ui.customerManageTable->mapFromGlobal(event->globalPos());
QRect rect1(QPoint(0, 0), ui.customerManageTable->size());
rect = rect1;
}
if (currentTableName.compare(tr("商品管理")) == 0)
{
manageTablePos = ui.commodityManageTable->mapFromGlobal(event->globalPos());
QRect rect1(QPoint(0, 0), ui.commodityManageTable->size());
rect = rect1;
}
qDebug() << "manageTablePos is NULL?:" << (manageTablePos.isNull()) << "rect is NULL?: " << rect.isNull();
if (!rect.contains(manageTablePos))
{
return;
}
qDebug() << tr("进来了");
QPoint point = event->pos(); //得到窗口坐标
qDebug() << tr("table is ") << ui.mainTab->tabText(ui.mainTab->currentIndex());
//qDebug() << event->
pop_menu->clear(); //清除原有菜单
pop_menu->addAction(action_add);//添加
pop_menu->addAction(action_copy);//复制
pop_menu->addSeparator();
pop_menu->addAction(action_delete); //删除
pop_menu->addAction(action_modification);//修改
//菜单出现的位置为当前鼠标的位置
pop_menu->exec(QCursor::pos());
event->accept();
}
//添加动作
void StewardSoft::actions()
{
pop_menu = new QMenu(); //创建菜单项
action_delete->setText(tr("删除"));
action_modification->setText(tr("修改"));
action_copy->setText(tr("复制"));
action_add->setText(tr("添加"));
}
int StewardSoft::deleteDate(QString tableName, QString name, QTableWidget *tableWidget)
{
qDebug() << tr("要删除数据了,看下删除者的权限: ") << userPrivilege;
if (userPrivilege != 1)
{
QMessageBox::warning(NULL, tr("删除警告"), tr("您的权限不够,无法删除数据!"), QMessageBox::Yes | QMessageBox::No);
return -1;
}
//建立并打开数据库
QSqlDatabase database;
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("MyDataBase.db");
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
qDebug() << "Succeed to connect database.";
}
QSqlQuery sql_query(database);
//删除数据
if (tableName == "user")
{
sql_query.prepare("delete from " + tableName + " where name= '" + name + "'");
}
if (tableName == "customer")
{
sql_query.prepare("delete from " + tableName + " where CustomerName= '" + name + "'");
}
if (tableName == "commodity")
{
sql_query.prepare("delete from " + tableName + " where commodityEquitmentNumber= '" + name + "'");
}
if (!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << tr("登录账户删除成功!");
QMessageBox::information(NULL, tr("结果"), name + tr("删除成功"), QMessageBox::Ok);
//关闭数据库
database.close();
//查询所有数据
TableInit(tableName, tableWidget);
return 1;
}
//关闭数据库
database.close();
return -1;
}
//右键动作被按下
void StewardSoft::actionClick()
{
qDebug() << "actionClick here";
}
//排序,从大到小
bool Comp(const int &a, const int &b)
{
return a > b;
}
//删除
void StewardSoft::actionDeleteClick()
{
qDebug() << tr("当前登陆者权限为:") << userPrivilege;
if (userPrivilege != 1)
{
QMessageBox::about(NULL, tr("警告"), tr("当前登陆者权限不可删除数据"));
return;
}
//TODO: 在退出窗口之前,实现希望做的操作
QMessageBox::StandardButton r = QMessageBox::question(this, tr("删除提示"), tr("确定删除数据?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
if (r == QMessageBox::No)
{
return;
}
else if(r == QMessageBox::Yes)
{
qDebug() << tr("删除数据");
QString currentTab = ui.mainTab->tabText(ui.mainTab->currentIndex());
if (currentTab == tr("用户管理"))
{
QList<QTableWidgetSelectionRange>ranges = ui.userManageTable->selectedRanges();
int count = ranges.count();
QVector<int> vec;
for (int i = 0; i < count; i++)
{
int topRow = ranges.at(i).topRow();
int bottomRow = ranges.at(i).bottomRow();
for (int j = topRow; j <= bottomRow; j++)
{
qDebug() << "selectRow:" << j;
vec.push_back(j);
}
}
std::sort(vec.begin(), vec.end(), Comp);
for (int k = 0; k < vec.size(); k++)
{
qDebug() << "从大到小:" << vec[k];
QString needDeleteUser = ui.userManageTable->item(vec[k], 0)->text();
qDebug() << tr("当前要删除的用户: ") << needDeleteUser;
deleteDate("user", needDeleteUser, ui.userManageTable);
}
/*QTableWidgetItem *currentItem = ui.userManageTable->currentItem();
QString needDeleteUser = ui.userManageTable->item(currentItem->row(), 0)->text();
qDebug() << tr("当前要删除的用户: ") << ui.userManageTable->item(currentItem->row(), 0)->text();
deleteDate("user", needDeleteUser, ui.userManageTable);*/
}
if (currentTab == tr("客户管理"))
{
QTableWidgetItem *currentItem = ui.customerManageTable->currentItem();
QString needDeleteUser = ui.customerManageTable->item(currentItem->row(), 0)->text();
qDebug() << tr("当前要删除的客户: ") << ui.customerManageTable->item(currentItem->row(), 0)->text();
deleteDate("customer", needDeleteUser, ui.customerManageTable);
}
if (currentTab == tr("商品管理"))
{
QTableWidgetItem *currentItem = ui.commodityManageTable->currentItem();
QString needDeleteUser = ui.commodityManageTable->item(currentItem->row(), 1)->text();
qDebug() << tr("当前要删除的商品: ") << ui.commodityManageTable->item(currentItem->row(), 0)->text();
deleteDate("commodity", needDeleteUser, ui.commodityManageTable);
}
}
}
//修改
void StewardSoft::actionModificationClick()
{
QString currentTabName = ui.mainTab->tabText(ui.mainTab->currentIndex());
qDebug() << "actionModificationClick here " << currentTabName;
qDebug() << tr("当前登陆者权限为:") << userPrivilege;
if (currentTabName == tr("用户管理"))
{
qDebug() << tr("修改用户管理");
int row = ui.userManageTable->currentItem()->row();
qDebug() << tr("要修改的用户权限等级:") << ui.userManageTable->item(row, 2)->text().toInt();
if (userPrivilege == 1)
{
userManageChangeInfo->ui.userManageChangeInfoNameLE->setText(ui.userManageTable->item(row, 0)->text()); //账户
userManageChangeInfo->ui.userManageChangeInfoPwdLE->setText(ui.userManageTable->item(row, 1)->text()); //密码
userManageChangeInfo->ui.userManageChangeInfoPrivilegeLE->setText(ui.userManageTable->item(row, 2)->text()); //权限等级
//userManageChangeInfo->ui.userManageChangeInfoCreatorLE->setText(ui.menuadmin->title()); //创建人
userManageChangeInfo->ui.userManageChangeInfoCreatorLE->setText(ui.loginUserBtn->text()); //创建人
userManageChangeInfo->ui.userManageChangeInfoNameLE->setEnabled(false);
userManageChangeInfo->isAddNewData = false;
userManageChangeInfo->currentUserPrivilege = userPrivilege;
userManageChangeInfo->exec();
}
else
{
QMessageBox::information(NULL, tr("提示"), tr("当前用户不可更改登录表信息"), QMessageBox::Ok);
}
}
if (currentTabName == tr("客户管理"))
{
qDebug() << tr("修改客户管理");
int row = ui.customerManageTable->currentItem()->row();
customerChangeInfo->ui.changeContentNameLE->setText(ui.customerManageTable->item(row, 0)->text()); //客户姓名
customerChangeInfo->ui.changeContentPhoneLE->setText(ui.customerManageTable->item(row, 1)->text()); //客户联系方式
customerChangeInfo->ui.changeContentAreaLE->setText(ui.customerManageTable->item(row, 2)->text()); //地区
customerChangeInfo->ui.changeContentElseTE->setText(ui.customerManageTable->item(row, 3)->text()); //备注信息
customerChangeInfo->ischangeFlag = true;
customerChangeInfo->ui.changeContentNameLE->setEnabled(false);
customerChangeInfo->exec();
}
if (currentTabName == tr("商品管理"))
{
qDebug() << tr("修改商品管理");
int row = ui.commodityManageTable->currentItem()->row();
commmodityManagechangeInfo->ui.commmodityManageChangeInfoNameLE->setText(ui.commodityManageTable->item(row, 0)->text()); //商品名称
commmodityManagechangeInfo->ui.commmodityManageChangeInfoEquitmentLE->setText(ui.commodityManageTable->item(row, 1)->text()); //设备号
commmodityManagechangeInfo->ui.commmodityManageChangeInfoPropertyLE->setText(ui.commodityManageTable->item(row, 2)->text()); //属性
commmodityManagechangeInfo->ui.commmodityManageChangeInfoElseTE->setText(ui.commodityManageTable->item(row, 3)->text()); //备注信息
commmodityManagechangeInfo->ui.commmodityManageChangeInfoEquitmentLE->setEnabled(false);
commmodityManagechangeInfo->isChangeFlag = true;
commmodityManagechangeInfo->exec();
}
}
//复制
void StewardSoft::actionCopyClick()
{
qDebug() << "actionCopyClick here";
QString currentTabName = ui.mainTab->tabText(ui.mainTab->currentIndex());
int tableCurrentRow = 0;
QString copyContent = "";
if (currentTabName.compare(tr("用户管理")) == 0)
{
tableCurrentRow = ui.userManageTable->currentRow();
copyContent =tr("用户名:") + ui.userManageTable->item(tableCurrentRow, 0)->text(); //用户名:admin
}
if (currentTabName.compare(tr("客户管理")) == 0)
{
tableCurrentRow = ui.customerManageTable->currentRow();
QString name = ui.customerManageTable->item(tableCurrentRow, 0)->text();
QString phoneNum = ui.customerManageTable->item(tableCurrentRow, 1)->text();
QString area = ui.customerManageTable->item(tableCurrentRow, 2)->text();
QString elseInfo = ui.customerManageTable->item(tableCurrentRow, 3)->text();
copyContent = tr("客户姓名:") + name + tr(" 联系方式:") + phoneNum + tr(" 客户所在地区:") + area + tr(" 备注信息:") + elseInfo;
}
if (currentTabName.compare(tr("商品管理")) == 0)
{
tableCurrentRow = ui.commodityManageTable->currentRow();
QString name = ui.commodityManageTable->item(tableCurrentRow, 0)->text();
QString equipmentNum = ui.commodityManageTable->item(tableCurrentRow, 1)->text();
QString commodityProperty = ui.commodityManageTable->item(tableCurrentRow, 2)->text();
QString elseInfo = ui.commodityManageTable->item(tableCurrentRow, 3)->text();
copyContent = tr("商品名称:") + name + tr(" 商品设备号:") + equipmentNum + tr(" 商品属性:") + commodityProperty + tr(" 备注信息:") + elseInfo;
}
QClipboard *clipboard = QApplication::clipboard(); //获取系统剪贴板指针
QString originalText = clipboard->text(); //获取剪贴板上文本信息
clipboard->setText(copyContent); //设置剪贴板内容</span>
QMessageBox::about(NULL, tr("复制信息"), tr("内容已复制到剪切板,\n按ctrl + v即可粘贴文本或鼠标右键也可粘贴。"));
}
//添加
void StewardSoft::actionAddClick()
{
qDebug() << tr("添加菜单,当前页卡是:") << ui.mainTab->tabText(ui.mainTab->currentIndex());
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("用户管理")) == 0)
{
qDebug() << tr("弹出用户管理添加小界面 start");
//userManageChangeInfo = new UserManageChangeInfo(this);
connect(userManageChangeInfo, SIGNAL(AddNew()), this, SLOT(AddNewSlot()));
//userManageChangeInfo->ui.userManageChangeInfoCreatorLE->setText(ui.menuadmin->title()); //创建人
userManageChangeInfo->ui.userManageChangeInfoCreatorLE->setText(ui.loginUserBtn->text()); //创建人
userManageChangeInfo->isAddNewData = true;
userManageChangeInfo->ui.userManageChangeInfoNameLE->setText("");
userManageChangeInfo->ui.userManageChangeInfoPwdLE->setText("");
userManageChangeInfo->ui.userManageChangeInfoPrivilegeLE->setText("");
userManageChangeInfo->exec();
qDebug() << tr("弹出用户管理添加小界面 end");
}
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("客户管理")) == 0)
{
qDebug() << tr("客户管理");
customerChangeInfo->ui.changeContentNameLE->setText("");
customerChangeInfo->ui.changeContentPhoneLE->setText("");
customerChangeInfo->ui.changeContentAreaLE->setText("");
customerChangeInfo->ui.changeContentElseTE->setText("");
customerChangeInfo->ischangeFlag = false;
customerChangeInfo->ui.changeContentNameLE->setEnabled(true);
customerChangeInfo->exec();
}
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("商品管理")) == 0)
{
qDebug() << tr("商品管理");
commmodityManagechangeInfo->ui.commmodityManageChangeInfoNameLE->setText("");
commmodityManagechangeInfo->ui.commmodityManageChangeInfoEquitmentLE->setText("");
commmodityManagechangeInfo->ui.commmodityManageChangeInfoPropertyLE->setText("");
commmodityManagechangeInfo->ui.commmodityManageChangeInfoElseTE->setText("");
commmodityManagechangeInfo->isChangeFlag = false;
commmodityManagechangeInfo->ui.commmodityManageChangeInfoEquitmentLE->setEnabled(true);
commmodityManagechangeInfo->exec();
}
}
void StewardSoft::AddNewSlot()
{
//查询所有数据
TableInit("user", ui.userManageTable);
qDebug() << "ui.userManageTable->rowCount(): " << ui.userManageTable->rowCount();
ui.userManageTable->selectRow(ui.userManageTable->rowCount());
qDebug() << tr("添加成功");
}
//导出数据到excel
void StewardSoft::exportDataToExcel()
{
QString currentTableName = ui.mainTab->tabText(ui.mainTab->currentIndex());
QString tableName = "";
QTableWidget *currentTable;
if (currentTableName.compare(tr("用户管理")) == 0)
{
tableName = "user";
currentTable = ui.userManageTable;
}
if (currentTableName.compare(tr("客户管理")) == 0)
{
tableName = "customer";
currentTable = ui.customerManageTable;
}
if (currentTableName.compare(tr("商品管理")) == 0)
{
tableName = "commodity";
currentTable = ui.commodityManageTable;
}
qDebug() << tr("当前表名:") << tableName;
Table2ExcelByHtml(currentTable, currentTableName);
}
void StewardSoft::on_userManageTable_currentItemChanged(QTableWidgetItem *current, QTableWidgetItem *previous)
{
//qDebug() << tr("当前item是:") << current->text() << tr("行:") << current->row() << tr("列:") << current->column();
}
void StewardSoft::UpdateUserManageInfo()
{
//查询所有数据
if ((ui.mainTab->tabText(ui.mainTab->currentIndex())).compare(tr("用户管理")) == 0)
{
TableInit("user", ui.userManageTable);
ui.userManageTable->selectRow(ui.userManageTable->rowCount());
}
if ((ui.mainTab->tabText(ui.mainTab->currentIndex())).compare(tr("客户管理")) == 0)
{
TableInit("customer", ui.customerManageTable);
ui.customerManageTable->selectRow(ui.customerManageTable->rowCount());
}
if ((ui.mainTab->tabText(ui.mainTab->currentIndex())).compare(tr("商品管理")) == 0)
{
TableInit("commodity", ui.commodityManageTable);
ui.commodityManageTable->selectRow(ui.commodityManageTable->rowCount());
}
}
bool StewardSoft::eventFilter(QObject *obj, QEvent *e)
{
if (obj == ui.mainTtile)
{
if (e->type() == QEvent::MouseButtonDblClick)
{
on_mainBtnMax_clicked();
return true;
}
}
return QObject::eventFilter(obj, e);
}
void StewardSoft::mousePressEvent(QMouseEvent *event)
{
/*if (e->button() == Qt::LeftButton)
{
mDrag = true;
mDragPos = e->globalPos() - pos();
e->accept();
}*/
if (event->button() == Qt::LeftButton)
{
this->_isleftpressed = true;
QPoint temp = event->globalPos();
_plast = temp;
_curpos = countFlag(event->pos(), countRow(event->pos()));
event->ignore();
}
}
void StewardSoft::mouseMoveEvent(QMouseEvent *event)
{
if (mDrag && (event->buttons() && Qt::LeftButton))
{
move(event->globalPos() - mDragPos);
event->accept();
}
int poss = countFlag(event->pos(), countRow(event->pos()));
setCursorType(poss);
if (_isleftpressed)//是否左击
{
QPoint ptemp = event->globalPos();
ptemp = ptemp - _plast;
if (_curpos == 22)//移动窗口
{
ptemp = ptemp + pos();
move(ptemp);
}
else
{
QRect wid = geometry();
switch (_curpos)//改变窗口的大小
{
case 11:wid.setTopLeft(wid.topLeft() + ptemp); break;//左上角
case 13:wid.setTopRight(wid.topRight() + ptemp); break;//右上角
case 31:wid.setBottomLeft(wid.bottomLeft() + ptemp); break;//左下角
case 33:wid.setBottomRight(wid.bottomRight() + ptemp); break;//右下角
case 12:wid.setTop(wid.top() + ptemp.y()); break;//中上角
case 21:wid.setLeft(wid.left() + ptemp.x()); break;//中左角
case 23:wid.setRight(wid.right() + ptemp.x()); break;//中右角
case 32:wid.setBottom(wid.bottom() + ptemp.y()); break;//中下角
}
setGeometry(wid);
}
_plast = event->globalPos();//更新位置
}
event->ignore();
}
void StewardSoft::mouseReleaseEvent(QMouseEvent *event)
{
/*mDrag = false;*/
if (_isleftpressed)
_isleftpressed = false;
setCursor(Qt::ArrowCursor);
event->ignore();
}
void StewardSoft::mouseDoubleClickEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
if (windowState() != Qt::WindowFullScreen)
setWindowState(Qt::WindowFullScreen);
else setWindowState(Qt::WindowNoState);//恢复正常模式
}
event->ignore();
}
int StewardSoft::countFlag(QPoint p, int row)//计算鼠标在哪一列和哪一行
{
if (p.y()<MARGIN)
return 10 + row;
else if (p.y()>this->height() - MARGIN)
return 30 + row;
else
return 20 + row;
}
void StewardSoft::setCursorType(int flag)//根据鼠标所在位置改变鼠标指针形状
{
Qt::CursorShape cursor;
switch (flag)
{
case 11:
case 33:
cursor = Qt::SizeFDiagCursor; break;
case 13:
case 31:
cursor = Qt::SizeBDiagCursor; break;
case 21:
case 23:
cursor = Qt::SizeHorCursor; break;
case 12:
case 32:
cursor = Qt::SizeVerCursor; break;
case 22:
//cursor = Qt::OpenHandCursor; break;
cursor = Qt::ArrowCursor; break;
default:
cursor = Qt::ArrowCursor; break;
break;
}
setCursor(cursor);
}
int StewardSoft::countRow(QPoint p)//计算在哪一列
{
return (p.x()<MARGIN) ? 1 : (p.x()>(this->width() - MARGIN) ? 3 : 2);
}
void StewardSoft::on_mainBtnMin_clicked()
{
showMinimized();
}
void StewardSoft::on_mainBtnMax_clicked()
{
if (mIsMax)
{
setGeometry(mLocation);
ui.mainBtnMax->setIcon(QIcon("./img/max1.png"));
ui.mainBtnMax->setToolTip(QStringLiteral("最大化"));
}
else
{
mLocation = geometry();
setGeometry(qApp->desktop()->availableGeometry());
ui.mainBtnMax->setIcon(QIcon("./img/max2.png"));
ui.mainBtnMax->setToolTip(QStringLiteral("还原"));
}
mIsMax = !mIsMax;
}
void StewardSoft::on_mainBtnClose_clicked()
{
QMessageBox::StandardButton r = QMessageBox::question(this, tr("提示"), tr("确定退出?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
if (r == QMessageBox::Yes)
{
qApp->exit();
}
}
/**
* @func: on_addDataBtn_clicked
* @brief: 用于测试Model添加数据用
* @author: xxx
* @param: void
* @return: void
*/
void StewardSoft::on_addDataBtn_clicked()
{
QTime t;
qDebug() << t.currentTime().toString("hh:mm:ss:zzz");
QVector<TableInfo> vec;
for (int i = 0; i < 100; i++)
{
TableInfo info;
info.szName = "name,name1,name2,name3,name4" + QString::number(i);
info.szdsName = "dsname,dsname1,dsname2,dsname3,dsname4,dsname5" + QString::number(i);
info.szdo = "do,do1,do2,do3,do4,do5" + QString::number(i);
info.check = 0;
vec.push_back(info);
qApp->processEvents();
}
myModel->setInputData(vec);
QTime t1;
qDebug() << t1.currentTime().toString("hh:mm:ss:zzz");
}
void StewardSoft::leaveEvent(QEvent* event)
{
QTableWidgetItem *item = 0;
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("用户管理")) == 0)
{
//还原上一行的颜色
item = ui.userManageTable->item(previousColorRow, 0);
if (item != 0)
{
this->setRowColor(previousColorRow, lastRowBKColor);
}
}
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("客户管理")) == 0)
{
//还原上一行的颜色
item = ui.customerManageTable->item(previousColorRow, 0);
if (item != 0)
{
this->setRowColor(previousColorRow, lastRowBKColor);
}
}
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("商品管理")) == 0)
{
//还原上一行的颜色
item = ui.commodityManageTable->item(previousColorRow, 0);
if (item != 0)
{
this->setRowColor(previousColorRow, lastRowBKColor);
}
}
}
void StewardSoft::mycellEntered(int row, int column)
{
QTableWidgetItem *item = 0;
QTableWidget *currentTableWidget;
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("用户管理")) == 0)
{
//还原上一行的颜色
item = ui.userManageTable->item(previousColorRow, 0);
currentTableWidget = ui.userManageTable;
if (item != 0)
{
this->setRowColor(previousColorRow, lastRowBKColor);
}
}
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("客户管理")) == 0)
{
//还原上一行的颜色
item = ui.customerManageTable->item(previousColorRow, 0);
currentTableWidget = ui.customerManageTable;
if (item != 0)
{
this->setRowColor(previousColorRow, lastRowBKColor);
}
}
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("商品管理")) == 0)
{
//还原上一行的颜色
item = ui.commodityManageTable->item(previousColorRow, 0);
currentTableWidget = ui.commodityManageTable;
if (item != 0)
{
this->setRowColor(previousColorRow, lastRowBKColor);
}
}
//设置当前行的颜色
item = currentTableWidget->item(row, column);
if (item != 0 && !item->isSelected())
{
this->setRowColor(row, QColor(193, 210, 240));
}
//设置行的索引
previousColorRow = row;
}
void StewardSoft::setRowColor(int row, QColor color)
{
QTableWidget *currentTableWidget;
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("用户管理")) == 0)
{
currentTableWidget = ui.userManageTable;
}
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("客户管理")) == 0)
{
currentTableWidget = ui.customerManageTable;
}
if (ui.mainTab->tabText(ui.mainTab->currentIndex()).compare(tr("商品管理")) == 0)
{
currentTableWidget = ui.commodityManageTable;
}
if (currentTableWidget == NULL)
{
return;
}
for (int col = 0; col < currentTableWidget->columnCount(); col++)
{
QTableWidgetItem *item = currentTableWidget->item(row, col);
item->setBackgroundColor(color);
}
}
3.修改内容的弹窗 ChangeContent.cpp
#include "ChangeContent.h"
#include <QToolTip>
#define tr QString::fromLocal8Bit
ChangeContent::ChangeContent(QWidget *parent)
: QDialog(parent)
{
Qt::WindowFlags flags = Qt::Dialog;
flags |= Qt::WindowCloseButtonHint;
setWindowFlags(flags);
// 取消边框
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
ui.setupUi(this);
ui.changeContentNameLE->setText("");
ui.changeContentPhoneLE->setText("");
ui.changeContentAreaLE->setText("");
ui.changeContentElseTE->setText("");
connect(ui.changeContentElseTE, SIGNAL(returnPressed()), ui.changeContentSureBtn, SIGNAL(clicked()), Qt::UniqueConnection);
}
ChangeContent::~ChangeContent()
{
delete& ui;
}
void ChangeContent::Table2ExcelByHtml(QTableWidget *table, QString title)
{
QString fileName = QFileDialog::getSaveFileName(table, "保存", QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "Excel 文件(*.xls *.xlsx)");
if (fileName != "")
{
QAxObject *excel = new QAxObject;
if (excel->setControl("Excel.Application")) //连接Excel控件
{
excel->dynamicCall("SetVisible (bool Visible)", "false");//不显示窗体
excel->setProperty("DisplayAlerts", false);//不显示任何警告信息。如果为true那么在关闭是会出现类似“文件已修改,是否保存”的提示
QAxObject *workbooks = excel->querySubObject("WorkBooks");//获取工作簿集合
workbooks->dynamicCall("Add");//新建一个工作簿
QAxObject *workbook = excel->querySubObject("ActiveWorkBook");//获取当前工作簿
QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);
int i, j;
//QTablewidget 获取数据的列数
int colcount = table->columnCount();
//QTablewidget 获取数据的行数
int rowscount = table->rowCount();
//QTableView 获取列数
//int colount=ui->tableview->model->columnCount();
//QTableView 获取行数
//int rowcount=ui->tableview->model->rowCount();
QAxObject *cell, *col;
//标题行
cell = worksheet->querySubObject("Cells(int,int)", 1, 1);
cell->dynamicCall("SetValue(const QString&)", title);
cell->querySubObject("Font")->setProperty("Size", 18);
//调整行高
worksheet->querySubObject("Range(const QString&)", "1:1")->setProperty("RowHeight", 30);
//合并标题行
QString cellTitle;
cellTitle.append("A1:");
cellTitle.append(QChar(colcount - 1 + 'A'));
cellTitle.append(QString::number(1));
QAxObject *range = worksheet->querySubObject("Range(const QString&)", cellTitle);
range->setProperty("WrapText", true);
range->setProperty("MergeCells", true);
range->setProperty("HorizontalAlignment", -4108);//xlCenter
range->setProperty("VerticalAlignment", -4108);//xlCenter
//列标题
for (i = 0; i < colcount; i++)
{
QString columnName;
columnName.append(QChar(i + 'A'));
columnName.append(":");
columnName.append(QChar(i + 'A'));
col = worksheet->querySubObject("Columns(const QString&)", columnName);
col->setProperty("ColumnWidth", table->columnWidth(i) / 6);
cell = worksheet->querySubObject("Cells(int,int)", 2, i + 1);
//QTableWidget 获取表格头部文字信息
columnName = table->horizontalHeaderItem(i)->text();
//QTableView 获取表格头部文字信息
// columnName=ui->tableView_right->model()->headerData(i,Qt::Horizontal,Qt::DisplayRole).toString();
cell->dynamicCall("SetValue(const QString&)", columnName);
cell->querySubObject("Font")->setProperty("Bold", true);
cell->querySubObject("Interior")->setProperty("Color", QColor(191, 191, 191));
cell->setProperty("HorizontalAlignment", -4108);//xlCenter
cell->setProperty("VerticalAlignment", -4108);//xlCenter
}
//数据区
//QTableWidget 获取表格数据部分
for (i = 0; i < rowscount; i++){
for (j = 0; j < colcount; j++)
{
worksheet->querySubObject("Cells(int,int)", i + 3, j + 1)->dynamicCall("SetValue(const QString&)", table->item(i, j) ? table->item(i, j)->text() : "");
}
}
//QTableView 获取表格数据部分
// for(i=0;i<rowcount;i++) //行数
// {
// for (j=0;j<colcount;j++) //列数
// {
// QModelIndex index = ui->tableView_right->model()->index(i, j);
// QString strdata=ui->tableView_right->model()->data(index).toString();
// worksheet->querySubObject("Cells(int,int)", i+3, j+1)->dynamicCall("SetValue(const QString&)", strdata);
// }
// }
//画框线
QString lrange;
lrange.append("A2:");
lrange.append(colcount - 1 + 'A');
lrange.append(QString::number(table->rowCount() + 2));
range = worksheet->querySubObject("Range(const QString&)", lrange);
range->querySubObject("Borders")->setProperty("LineStyle", QString::number(1));
range->querySubObject("Borders")->setProperty("Color", QColor(0, 0, 0));
//调整数据区行高
QString rowsName;
rowsName.append("2:");
rowsName.append(QString::number(table->rowCount() + 2));
range = worksheet->querySubObject("Range(const QString&)", rowsName);
range->setProperty("RowHeight", 20);
workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(fileName));//保存至fileName
workbook->dynamicCall("Close()");//关闭工作簿
excel->dynamicCall("Quit()");//关闭excel
delete excel;
excel = NULL;
if (QMessageBox::question(NULL, "完成", "文件已经导出,是否现在打开?", QMessageBox::Yes | QMessageBox::No) == QMessageBox::Yes)
{
QDesktopServices::openUrl(QUrl("file:///" + QDir::toNativeSeparators(fileName)));
}
}
else
{
QMessageBox::warning(NULL, "错误", "未能创建 Excel 对象,请安装 Microsoft Excel。", QMessageBox::Apply);
}
}
}
void ChangeContent::closeEvent(QCloseEvent *event)
{
if (ui.changeContentBtnClose->isDefault())
{
//TODO: 在退出窗口之前,实现希望做的操作
QMessageBox::StandardButton r = QMessageBox::question(this, tr("提示"), tr("确定退出?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
if (r == QMessageBox::Yes)
{
event->accept();
}
else
{
event->ignore();
}
}
else
{
return;
}
}
void ChangeContent::mousePressEvent(QMouseEvent *e)
{
if (e->button() == Qt::LeftButton)
{
mDrag = true;
mDragPos = e->globalPos() - pos();
e->accept();
}
}
void ChangeContent::mouseMoveEvent(QMouseEvent *e)
{
if (mDrag && (e->buttons() && Qt::LeftButton))
{
move(e->globalPos() - mDragPos);
e->accept();
}
}
void ChangeContent::mouseReleaseEvent(QMouseEvent *event)
{
mDrag = false;
}
void ChangeContent::on_changeContentBtnMin_clicked()
{
showMinimized();
}
void ChangeContent::on_changeContentBtnClose_clicked()
{
this->close();
}
void ChangeContent::on_changeContentSureBtn_clicked()
{
qDebug() << "clicked login_btn";
if (ui.changeContentNameLE->text() == "" || ui.changeContentPhoneLE->text() == "")
{
if (ui.changeContentNameLE->text() == "")
{
QToolTip::showText(ui.changeContentNameLE->mapToGlobal(QPoint(100, 0)), tr("您输入的账户为空,请重新输入!"));
}
if (ui.changeContentPhoneLE->text() == "")
{
QToolTip::showText(ui.changeContentPhoneLE->mapToGlobal(QPoint(100, 0)), tr("您输入的客户电话为空,请重新输入!"));
}
return;
}
else
{
QString customerName = ui.changeContentNameLE->text();
QString customerPhone = ui.changeContentPhoneLE->text();
QString customerArea = ui.changeContentAreaLE->text();
QString customerElseInfo = ui.changeContentElseTE->toPlainText();
//建立并打开数据库
QSqlDatabase database;
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("MyDataBase.db");
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
qDebug() << "Succeed to connect database.";
}
QSqlQuery sql_query(database);
//查询数据
if (ischangeFlag)
{
sql_query.prepare("update customer set CustomerName ='" + customerName + "', " + "CustomerPhone='" + customerPhone + "',Area='" + customerArea + "',ElseInfo='" + customerElseInfo + "' where CustomerName='" + customerName + "'");
}
else
{
sql_query.prepare("insert into customer values ('" + customerName + "','" + customerPhone + "','" + customerArea + "','" + customerElseInfo + "')");
}
//qDebug() << sql_query.exec();
if (!sql_query.exec())
{
qDebug() << sql_query.lastError();
//错误提示
QToolTip::showText(ui.changeContentNameLE->mapToGlobal(QPoint(0, 0)), QString::fromLocal8Bit("客户信息已存在!"));
}
else
{
qDebug() << tr("添加成功");
emit UpdateCustomerManageTable();
this->close();
}
//关闭数据库
database.close();
}
ui.changeContentNameLE->setEnabled(true);
return;
}
void ChangeContent::on_changeContentCancleBtn_clicked()
{
this->close();
}
//导出数据到excel
void ChangeContent::on_customerManageEXportDataBtn_clicked()
{
qDebug() << "导出数据到excel!";
}
4.商品信息修改页面 commodityManageChangeInfo.cpp
#include "commmodityManageChangeInfo.h"
#define tr QString::fromLocal8Bit
commmodityManageChangeInfo::commmodityManageChangeInfo(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
// 取消边框
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
ui.commmodityManageChangeInfoNameLE->setText("");
ui.commmodityManageChangeInfoEquitmentLE->setText("");
ui.commmodityManageChangeInfoPropertyLE->setText("");
ui.commmodityManageChangeInfoElseTE->setText("");
}
commmodityManageChangeInfo::~commmodityManageChangeInfo()
{
delete &ui;
}
void commmodityManageChangeInfo::closeEvent(QCloseEvent *event)
{
if (ui.commmodityManageChangeInfoBtnClose->isDefault())
{
//TODO: 在退出窗口之前,实现希望做的操作
QMessageBox::StandardButton r = QMessageBox::question(this, tr("提示"), tr("确定退出?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
if (r == QMessageBox::Yes)
{
event->accept();
}
else
{
event->ignore();
}
}
else
{
return;
}
}
void commmodityManageChangeInfo::on_commmodityManageChangeInfoSureBtn_clicked()
{
qDebug() << "clicked login_btn";
if (ui.commmodityManageChangeInfoNameLE->text() == "" || ui.commmodityManageChangeInfoEquitmentLE->text() == "")
{
if (ui.commmodityManageChangeInfoNameLE->text() == "")
{
QToolTip::showText(ui.commmodityManageChangeInfoNameLE->mapToGlobal(QPoint(100, 0)), tr("您输入的商品名称为空,请重新输入!"));
}
if (ui.commmodityManageChangeInfoEquitmentLE->text() == "")
{
QToolTip::showText(ui.commmodityManageChangeInfoEquitmentLE->mapToGlobal(QPoint(100, 0)), tr("您输入的商品设备号为空,请重新输入!"));
}
return;
}
else
{
QString commodityName = ui.commmodityManageChangeInfoNameLE->text();
QString commodityEquitmentNumber = ui.commmodityManageChangeInfoEquitmentLE->text();
QString commodityProperty = ui.commmodityManageChangeInfoPropertyLE->text();
QString commodityElseInfo = ui.commmodityManageChangeInfoElseTE->toPlainText();
//建立并打开数据库
QSqlDatabase database;
database = QSqlDatabase::addDatabase("QSQLITE");
database.setDatabaseName("MyDataBase.db");
if (!database.open())
{
qDebug() << "Error: Failed to connect database." << database.lastError();
}
else
{
qDebug() << "Succeed to connect database.";
}
QSqlQuery sql_query(database);
//查询数据
if (isChangeFlag)
{
sql_query.prepare("update commodity set commodityName ='" + commodityName + "', " + "commodityProperty='" + commodityProperty + "',commodityElseInfo='" + commodityElseInfo + "' where commodityEquitmentNumber='" + commodityEquitmentNumber + "'");
}
else
{
sql_query.prepare("insert into commodity values ('" + commodityName + "','" + commodityEquitmentNumber + "','" + commodityProperty + "','" + commodityElseInfo + "')");
}
//qDebug() << sql_query.exec();
if (!sql_query.exec())
{
qDebug() << sql_query.lastError();
//错误提示
QToolTip::showText(ui.commmodityManageChangeInfoEquitmentLE->mapToGlobal(QPoint(0, 0)), QString::fromLocal8Bit("设备号重复,请重新输入!"));
}
else
{
qDebug() << tr("添加商品信息成功");
emit UpdatecommodityManageTable();
this->close();
}
//关闭数据库
database.close();
}
return;
}
void commmodityManageChangeInfo::mousePressEvent(QMouseEvent *e)
{
if (e->button() == Qt::LeftButton)
{
mDrag = true;
mDragPos = e->globalPos() - pos();
e->accept();
}
}
void commmodityManageChangeInfo::mouseMoveEvent(QMouseEvent *e)
{
if (mDrag && (e->buttons() && Qt::LeftButton))
{
move(e->globalPos() - mDragPos);
e->accept();
}
}
void commmodityManageChangeInfo::mouseReleaseEvent(QMouseEvent *event)
{
mDrag = false;
}
void commmodityManageChangeInfo::on_commmodityManageChangeInfoBtnMin_clicked()
{
showMinimized();
}
void commmodityManageChangeInfo::on_commmodityManageChangeInfoBtnClose_clicked()
{
this->close();
}
void commmodityManageChangeInfo::on_commmodityManageChangeInfoCancleBtn_clicked()
{
this->close();
}
源码:https://download.csdn.net/download/sinat_33419023/12713592