头文件
#include <QEvent>
#include <QMouseEvent>
函数声明
//事件过滤
bool eventFilter(QObject *obj, QEvent *e);
//取消选中
void deselect(QMouseEvent *e);
在初始化的时候注册事件过滤
//注册事件过滤
m_tableWidget->viewport()->installEventFilter(this);
函数实现
//事件过滤
bool Widget::eventFilter(QObject *target, QEvent *event)
{
//类型转换
QMouseEvent *e = static_cast<QMouseEvent *>(event);
//判空
if (e == nullptr)
{
return QWidget::eventFilter(target, event);
}
//判断事件类型为鼠标点击
if (e->type() == QEvent::MouseButtonPress || e->type() == QEvent::MouseButtonRelease)
{
//点击空白处取消选中
deselect(e);
}
return QWidget::eventFilter(target, event);
}
void Widget::deselect(QMouseEvent *e)
{
// 获取当前鼠标坐标
QPoint point = e->pos();
// 根据鼠标坐标,获取此时鼠标按下时所在的行、列
QModelIndex index = m_tableWidget->indexAt(point);
m_tableWidget->item(index.row(), index.column());
// 判断该单元格是否是空单元格
if (m_tableWidget->item(index.row(), index.column()) == nullptr)
{
//取消选中
m_tableWidget->setCurrentItem(NULL);
}
}