1 Star 0 Fork 0

世坤/酒店管理系统

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mainwindow.cpp 9.18 KB
一键复制 编辑 原始数据 按行查看 历史
邓世坤 提交于 2024-06-17 21:22 . 修复删除bug
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QGraphicsDropShadowEffect>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowFlags(Qt::FramelessWindowHint | Qt::Window | Qt::WindowMinimizeButtonHint); //设置为无边框窗口
ui->menuWidget->setEnabled(false);
// this->roomView = new RoomView;
showRoomInformation(); //展示客房信息
//绑定item的点击槽函数
connect(ui->listWidget,&QListWidget::itemClicked ,this,&MainWindow::listWidgetClickedSlot);
}
//展示客房信息
void MainWindow::showRoomInformation()
{
GuestRoom grm; //创建客房模块对象
map<string,GuestRoom> rooms; //保存客房信息的 map键值对
rooms=grm.read_data(); //读取客房信息保存
if(rooms .empty() )
{
QMessageBox::information(this,"提示","无客房信息");
return;
}
ui->listWidget->clear(); //清空listWIdget当前显示的 item
this->dataItemMap.clear(); //清空item和infomationWidget键值对
for (auto& room :rooms)
{
//遍历rooms键值队
QListWidgetItem *item = new QListWidgetItem; //创建item对象
InformationItemWidget *informationItemWidget = new InformationItemWidget(
QString::fromStdString(room.second.get_num()),
QString::fromStdString(room.second.get_name()),
QString::number(room.second.get_area()),
QString::number(room.second.get_price()),
QString::number(room.second.get_bed_num()),
room.second.show_state() == u8"空闲" ? 0 : 1
); //创建 informationItemWIdget对象
item->setSizeHint(QSize(informationItemWidget->width(),informationItemWidget->height())); //设置item 大小
ui->listWidget->addItem(item); //给listWidget添加item
ui->listWidget->setItemWidget(item,informationItemWidget); //把自定义的 infomationItemWidget与item绑定
this->dataItemMap.insert(item,informationItemWidget); //插入到map键值对
}
}
MainWindow::~MainWindow()
{
if(this->flagItem != nullptr){
delete flagItem;
}
delete ui;
}
//本地事件槽函数定义 用来改变窗口大小的函数
bool MainWindow::nativeEvent(const QByteArray &eventType, void *message, long *result)
{
int m_nBorder = 10; //边界宽度
Q_UNUSED(eventType)
MSG *param = static_cast<MSG *>(message);
switch (param->message)
{
case WM_NCHITTEST:
{
int nX = GET_X_LPARAM(param->lParam) - this->geometry().x();
int nY = GET_Y_LPARAM(param->lParam) - this->geometry().y();
*result = HTCAPTION;
//判断鼠标位置是否位于窗口边界
if ((nX > 0) && (nX < m_nBorder))
*result = HTLEFT;
if ((nX > this->width() - m_nBorder) && (nX < this->width()))
*result = HTRIGHT;
if ((nY > 0) && (nY < m_nBorder))
*result = HTTOP;
if ((nY > this->height() - m_nBorder) && (nY < this->height()))
*result = HTBOTTOM;
if ((nX > 0) && (nX < m_nBorder) && (nY > 0)
&& (nY < m_nBorder))
*result = HTTOPLEFT;
if ((nX > this->width() - m_nBorder) && (nX < this->width())
&& (nY > 0) && (nY < m_nBorder))
*result = HTTOPRIGHT;
if ((nX > 0) && (nX < m_nBorder)
&& (nY > this->height() - m_nBorder) && (nY < this->height()))
*result = HTBOTTOMLEFT;
if ((nX > this->width() - m_nBorder) && (nX < this->width())
&& (nY > this->height() - m_nBorder) && (nY < this->height()))
*result = HTBOTTOMRIGHT;
if (*result == HTCAPTION)
{
return false;
}
return true;
}
}
return QMainWindow::nativeEvent(eventType, message, result);
}
//鼠标点击事件槽函数定义
void MainWindow::mousePressEvent(QMouseEvent *e)
{
if(e->button()==Qt::LeftButton)
{
isPressed=true;
curPos=e->pos(); //记录当前的点击坐标
}
}
//鼠标移动事件槽函数定义
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
if(isPressed) //如果鼠标左键按下
{
this->move(e->pos()-curPos+this->pos()); //窗口移动
}
}
//鼠标释放事件定义
void MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
isPressed=false;
}
//窗口关闭按钮槽函数定义
void MainWindow::on_closeWin_Btn_clicked()
{
qApp->exit();
}
//窗口最小化
void MainWindow::on_minWin_Btn_clicked()
{
this->showMinimized();
}
//窗口最大化、窗口化
bool isMaxWin = true;
void MainWindow::on_win_Btn_clicked()
{
isMaxWin=!isMaxWin;
if(isMaxWin) //根据是否最大化窗口,改变对应的图标
{
ui->win_Btn->setIcon(QIcon(":/new/prefix1/img/winImg.png"));
this->showMaximized();
}
else
{
ui->win_Btn->setIcon(QIcon(":/new/prefix1/img/maxWin.png"));
this->showNormal();
}
}
//添加客房信息
void MainWindow::on_addGusetRoom_Btn_clicked()
{
OperationInterface operationInterface; //创建添加信息界面对象
operationInterface.exec(); //阻塞当前进程,显示创建信息界面
showRoomInformation(); //调用显示信息函数
ui->menuWidget->setEnabled(false); //设置操作菜单为禁用
}
//listWidget的item被点击槽函数
void MainWindow::listWidgetClickedSlot(QListWidgetItem *item)
{
ui->menuWidget->setEnabled(true); //设置操作菜单启用
QMap<QListWidgetItem*,InformationItemWidget*>::iterator iter; //创建迭代器
for(iter = this->dataItemMap.begin();iter != this->dataItemMap.end() ; ++iter){
// 循环遍历键值对,把所有item的边框去除
// qDebug()<< iter.value()->getState();
int i = iter.value()->getState(); //获取当前客房状态
iter.value()->setState(i); //调用设置状态函数(函数里有清空边框样式的qss)
}
this->flagItem = item; //临时保存
InformationItemWidget *widget = this->dataItemMap[item]; //保存被点击的自定义item
QString styleString = widget->styleSheet(); //获取当前item的qss语句
QString borderString = "#verticalWidget{\
background-color: rgb(255, 170, 0);\
}";//橙色边框qss
widget->setStyleSheet(styleString+borderString); //设置样式
widget->getState() ? ui->radioButton_2->setChecked(true) : ui->radioButton->setChecked(true); //根据客房状态设置菜单上的单选按钮选中状态
}
//删除按钮槽函数
void MainWindow::on_delBtn_clicked()
{
//从文件中删除
this->guestRoomManager.remove_data(this->dataItemMap[flagItem]->getNum().toStdString());
//从显示界面中删除
ui->listWidget->removeItemWidget(flagItem);
//删除界面对象
delete dataItemMap[flagItem];
//从键值对中删除
this->dataItemMap.remove(flagItem);
delete flagItem;
flagItem = nullptr;
ui->menuWidget->setEnabled(false);
}
//修改状态按钮槽函数
void MainWindow::on_setBtn_clicked()
{
int state = ui->radioButton->isChecked() ? 0 : 1; //判断选中的哪个单选按钮,并把状态保存 0代表空闲 1代表入住
this->guestRoomManager.set_room_state(this->dataItemMap[flagItem]->getNum().toStdString(),state); //调用设置状态接口保存状态到文件
this->dataItemMap[flagItem]->setState(state); //调用自定义item中的设置状态接口改变样式
}
//搜索按钮槽函数
void MainWindow::on_sortBtn_clicked()
{
if(ui->sort_lineEdit->text().isEmpty()){
//如果为空则显示所有
this->showRoomInformation();
return;
}
GuestRoom guestRoom;
map<string,GuestRoom> datas = guestRoom.read_data(); //读取所有客房信息
if(datas.find(ui->sort_lineEdit->text().toStdString()) == datas.end()){
//没有找到客房
QMessageBox::information(this,u8"提示",u8"没找到客房");
return;
}
GuestRoom room = datas.find(ui->sort_lineEdit->text().toStdString())->second; //保存被 找到的客房对象
ui->listWidget->clear(); //清空listWidget上的item
QListWidgetItem *item = new QListWidgetItem;
InformationItemWidget *informationItemWidget = new InformationItemWidget(
QString::fromStdString(room.get_num()),
QString::fromStdString(room.get_name()),
QString::number(room.get_area()),
QString::number(room.get_price()),
QString::number(room.get_bed_num()),
room.show_state() == u8"空闲" ? 0 : 1
); //用找到的信息创建一个自定义item对象
item->setSizeHint(QSize(informationItemWidget->width(),informationItemWidget->height())); //根据 自定义的item 设置item大小
ui->listWidget->addItem(item); //添加item到listWIdget
ui->listWidget->setItemWidget(item,informationItemWidget); //绑定自定义item
this->dataItemMap.clear(); //清空键值对
this->dataItemMap.insert(item,informationItemWidget); //添加新创建的item和自定义item对象到键值对
ui->menuWidget->setEnabled(false); //设置菜单状态禁用
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/deng-shikun/hotel-management-system.git
[email protected]:deng-shikun/hotel-management-system.git
deng-shikun
hotel-management-system
酒店管理系统
master

搜索帮助