添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

前文介绍了通过继承重写mousePressEvent 来实现点击空白处取消选中的方法,有个弊端就是需要继承,为这个简单功能让工程多了2个类文件,感觉不太爽。

后来采用了一种更简单的方法,不需要继承即可实现。

主要就是通过父窗口(如MainWindow)的eventFilter,进行点击过滤处理。

在MainWindow构造函数 添加如下代码:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
    ui->setupUi(this);
    ui->treeView->viewport()->installEventFilter(this);

在MainWindow.h 添加 eventFilter:

class MainWindow : public QMainWindow
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
protected:
    bool eventFilter(QObject *obj, QEvent *event);
private:
    Ui::MainWindow *ui;
#endif // MAINWINDOW_H
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
    if (obj == ui->treeView->viewport())
        //点击树的空白,取消选中
        if (event->type() == QEvent::MouseButtonPress)
            QMouseEvent *event = (QMouseEvent *)event;
            if (event->buttons() & Qt::LeftButton)
                QModelIndex index = ui->treeView->indexAt(event->pos());
                if (!index.isValid())
                    ui->treeView->setCurrentIndex(QModelIndex());
    return QObject::eventFilter(obj, event);

该函数可响应treeView的左键单击消息,如果点击的内容没有元素,我们就通过

ui->treeView->setCurrentIndex(QModelIndex());

来达到取消选中的效果。

1,简介前文介绍了通过继承重写mousePressEvent 来实现点击空白处取消选中的方法,有个弊端就是需要继承,为这个简单功能让工程多了2个类文件,感觉不太爽。后来采用了一种更简单的方法,不需要继承即可实现。主要就是通过父窗口(如MainWindow)的eventFilter,进行点击过滤处理。2,代码在MainWindow构造函数 添加如下代码:MainWindow::MainWindow(QWidget *parent) : QMainWindow(pa..
QTableWidget单击选中取消事件 很多情况下有这样的需求,当鼠标点击QTableWidget时,每次只能选中一行或者不选中,不允许选中多行。当点击表格中时选中一行,同时打开所选中的这行的详细信息(另一个GUI控件),当点击表格之外,选中取消高亮(取消选择),同时详细信息也消失。 1、QTableWidget时,选择行时,可以使用  setSelectionBehav
QTreeView Checkboxes 需要实现一个功能:在QT的TreeView中,能够使用复选框,并且选中父节点的复选框可以全选或取消子节点的复选框。 参考链接: http://blog.csdn.net/ajaxhe/article/details/7518285
代码里面有tree view的节点操作,包括添加,当前点击检查,遍历等。具体介绍见: Qt树形控件QTreeView使用1——节点的添加删除操作: http://blog.csdn.net/czyt1988/article/details/18996407 Qt树形控件QTreeView使用2——复选框的设置: http://blog.csdn.net/czyt1988/article/details/19171727 利用C++11的function和bind功能,实现QStandardItemModel的通用遍历函数: http://blog.csdn.net/czyt1988/article/details/21093451
先得到父节点所有的孩子节点,判断子节点勾选的总数selectCount selectCount = childrenCount;则该父节点需要设置为选中状态 selectCount = 0 ;则该父节点需要设置为未选中状态 否则设置为半选中