1,简介
Qt 自带的 Tree、Table控件,当选中模式是 ExtendedSelection 时,点击空白可以取消选择
其他选中模式下(比如单选),点击空白处却无法取消选中
如果需要这种功能,只好自己DIY
2,效果
3,主要代码
主要思路就是重写鼠标点击消息 mousePressEvent,判断是单击空白就取消选中
继承QTreeView 写了个MyTreeView类
复制这个类到你的项目就能直接用了,在 ui 里提升QTreeView为MyTreeView就行
MyTreeView.h:
#ifndef MYTREEVIEW_H
#define MYTREEVIEW_H
#include <QTreeView>
#include <QMouseEvent>
//改造QTreeView,实现点击空白处时取消选择
class MyTreeView : public QTreeView
{
Q_OBJECT
public:
MyTreeView(QWidget *parent = Q_NULLPTR);
signals:
void sigPressEmpty();
protected:
void mousePressEvent ( QMouseEvent * event ) ;
};
#endif
MyTreeView.cpp:
#include "MyTreeView.h"
MyTreeView::MyTreeView(QWidget *parent)
: QTreeView(parent)
{
}
void MyTreeView::mousePressEvent(QMouseEvent *event)
{
QPoint p = event->pos();
QModelIndex index = indexAt(p);
if(!index.isValid())
{
setCurrentIndex(QModelIndex()); //实现点空白处取消选择
emit sigPressEmpty();
return;
}
QTreeView::mousePressEvent(event);
}