头文件定义
QMenu *popMenu;
int selected_Current_Row;
设置tableView鼠标的选中形式
// 设置tableview鼠标选中形式
ui.tableView_people->setSelectionBehavior(QAbstractItemView::SelectRows);
ui.tableView_people->setContextMenuPolicy(Qt::CustomContextMenu);
右键内容初始化
popMenu = new QMenu(ui.tableView_people);
QAction *actionUpdateInfo = new QAction();
QAction *actionDelete = new QAction();
actionUpdateInfo->setText("修改");
actionDelete->setText("删除");
popMenu->addAction(actionUpdateInfo);
popMenu->addAction(actionDelete);
定义信号连接
connect(ui.tableView_people, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(slotContextMenu(QPoint)));
connect(popMenu, SIGNAL(triggered(QAction*)), this, SLOT(Slot_Menu_Choice_Action(QAction*)));
槽函数修改和删除操作
//右键删除或修改的操作
void peopleManagement::Slot_Menu_Choice_Action(QAction *act)
{
//获取tableview的内容到model以使用,防止搜索时tableView变化时右键出现次序错误
QAbstractItemModel *model = ui.tableView_people->model();
QModelIndex index = model->index(selected_Current_Row, 0);
QString dataGet = model->data(index).toString();
if (act->text() == QString("删除"))
{
QMessageBox messageDelete(QMessageBox::NoIcon, QString("提示"), QString("是否删除本行数据?"),
QMessageBox::Yes | QMessageBox::No, NULL);
if (messageDelete.exec() == QMessageBox::Yes)
{
QString sqlManaQuery;
sqlManaQuery = "select count(*) from equipment where people_jobNumber = '" + dataGet + "'";
QSqlQueryModel *modelManaQuery = new QSqlQueryModel;
modelManaQuery->setQuery(sqlManaQuery);
QModelIndex indexManaQuery = modelManaQuery->index(0, 0);
//如果equipment表中存在该jobnumber则不能直接删掉,否则肯定会报错,或者将数据库表弄成外键级联删除会将好几条设备信息全都删除掉了
//所以先提示要先给equipment指派新的管理人员然后才可以进行删除
if (indexManaQuery.data() == 0)
{
//执行对应工号信息的删除
QString sqlDelete;
QSqlQueryModel *modelDelete = new QSqlQueryModel;
sqlDelete = "delete from peopleinchargetable where people_jobNumber = '" + dataGet + "'";
modelDelete->setQuery(sqlDelete);
QMessageBox::about(NULL, "提示", "删除成功");
QString sqlPeople;
sqlPeople = "select people_jobNumber as 工号, people_department as 部门, people_freqphone as 电话号码, people_alterphone as 备用电话, people_name as 员工姓名 from peopleinchargetable";
modelPeople->setQuery(sqlPeople);
ui.tableView_people->setModel(modelPeople);
}
else {
QMessageBox::about(NULL, "警告", "请先为该负责人负责的设备重新指定负责人");
}
}
}
else {
QMessageBox messageUpdate(QMessageBox::NoIcon, QString("提示"), QString("是否要对本行数据进行修改?"),
QMessageBox::Yes | QMessageBox::No, NULL);
if (messageUpdate.exec() == QMessageBox::Yes)
{
updatePeo = new updatePeople;
//这个信号连接是准备接收修改界面完成修改信号后直接刷新人员信息
connect(updatePeo, SIGNAL(refresh()), this, SLOT(Slot_Refresh()));
updatePeo->updateJobNumber = dataGet;
updatePeo->show();
updatePeo->initUpdate();
}
}
}