总的来说,有两种方式实现
1,注册eventFilter,检测鼠标事件,获取鼠标位置,使用内置方法
QModelIndex QListView::indexAt(const QPoint &p) const,利用返回的QModelIndex,判断是否为空,为空则点击到空白区域,不为空则点击到标签项上。
添加eventFilter声明
bool eventFilter(QObject *obj, QEvent *e);
注册到QListView
ui->listView->viewport()->installEventFilter(this);
eventFilter实现
bool MainWindow::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(