qt tableView数据右键菜单

15 篇文章 2 订阅

头文件定义

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();
		}
	}
}
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值