Ski*_*ick 14 qt pyqt qtreeview
我希望能够通过单击QTreeView中没有项目的部分来取消选择QTreeView中的项目,但我似乎无法找到这样做.我拦截了一个不在项目上的点击,但是QTreeView没有clicked信号,所以我无法弄清楚如何做到这一点.
Yas*_*azk 15
基于@ Eric的解决方案,因为它只取消选择是否选中了点击的项目,这就是我想出的.单击QTreeView的空白区域时,此解决方案也适用
#ifndef DESELECTABLETREEVIEW_H
#define DESELECTABLETREEVIEW_H
#include "QTreeView"
#include "QMouseEvent"
#include "QDebug"
class DeselectableTreeView : public QTreeView
{
public:
    DeselectableTreeView(QWidget *parent) : QTreeView(parent) {}
    virtual ~DeselectableTreeView() {}
private:
    virtual void mousePressEvent(QMouseEvent *event)
    {
        QModelIndex item = indexAt(event->pos());
        bool selected = selectionModel()->isSelected(indexAt(event->pos()));
        QTreeView::mousePressEvent(event);
        if ((item.row() == -1 && item.column() == -1) || selected)
        {
            clearSelection();
            const QModelIndex index;
            selectionModel()->setCurrentIndex(index, QItemSelectionModel::Select);
        }
    }
};
#endif // DESELECTABLETREEVIEW_H
亚瑟尔
Ski*_*ick 11
这实际上非常简单(在PyQt中):
class DeselectableTreeView(QtGui.QTreeView):
    def mousePressEvent(self, event):
        self.clearSelection()
        QtGui.QTreeView.mousePressEvent(self, event)
Qt mousePressEvent用来发射clicked.如果在发送事件之前清除选择,则如果单击某个项目,则会选择该项目,否则将不会选择任何项目.非常感谢Patrice帮助我解决这个问题:)
小智 8
clearSelection在我的情况下不起作用.我正在使用具有单选模式的树视图.这是我编码的内容:
class DeselectableTreeView : public QTreeView
{
public:
    DeselectableTreeView(QWidget *parent) : QTreeView(parent) {}
    virtual ~DeselectableTreeView() {}
private:
    virtual void mousePressEvent(QMouseEvent *event)
    {
        QModelIndex item = indexAt(event->pos());
        bool selected = selectionModel()->isSelected(item);
        QTreeView::mousePressEvent(event);
        if (selected)
            selectionModel()->select(item, QItemSelectionModel::Deselect);
    }
};
这工作得很好.
埃里克
QTreeView继承自QAbstractView(http://doc.qt.digia.com/4.6/qtreeview.html),它有一个clicked信号.问题是只有当索引有效时才会发出信号,因此无法通过此信号实现所需的信号.
试着拦截mousePressEvent而不是.在该功能中,您可以找到用户点击的位置,并根据需要取消选择所选项目.