原因

有时在开发中,可能会对QTreeWidget进行操作,当点击feiQTreeWidgetItem时,需要焦点取消,无Item选中。

解决方案

可以通过设置事件过滤器进行实现。

1.QtreeWidget安装事件过滤器

ui->treeWidget->viewport()->installEventFilter(this);

2.重写eventFliter()函数
如果光标不在Item上,就设置当前Item下标为空

bool MainWindow::eventFilter(QObject *watched, QEvent *event)
{
    if(ui->treeWidget->viewport() == watched)
    {
        if(event->type() == QEvent::MouseButtonPress)
        {
            QMouseEvent *pME = (QMouseEvent*)event;
            if(pME->buttons() & Qt::LeftButton)
            {
                QModelIndex index = ui->treeWidget->indexAt(pME->pos());
                if(!index.isValid())
                {
                    ui->treeWidget->setCurrentIndex(QModelIndex());
                }
            }
        }
    }
    return QMainWindow::eventFilter(watched, event);
}

效果

选中状态

【Qt】点击QTreeWidget空白处,使当前选择的Item失效_事件过滤器


点击空白:

【Qt】点击QTreeWidget空白处,使当前选择的Item失效_Qt_02

结论

用行动祈祷比用言语更能够使上帝了解