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
Run Code Online (Sandbox Code Playgroud)
亚瑟尔
Ski*_*ick 11
这实际上非常简单(在PyQt中):
class DeselectableTreeView(QtGui.QTreeView):
def mousePressEvent(self, event):
self.clearSelection()
QtGui.QTreeView.mousePressEvent(self, event)
Run Code Online (Sandbox Code Playgroud)
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);
}
};
Run Code Online (Sandbox Code Playgroud)
这工作得很好.
埃里克
QTreeView继承自QAbstractView(http://doc.qt.digia.com/4.6/qtreeview.html),它有一个clicked信号.问题是只有当索引有效时才会发出信号,因此无法通过此信号实现所需的信号.
试着拦截mousePressEvent而不是.在该功能中,您可以找到用户点击的位置,并根据需要取消选择所选项目.
| 归档时间: |
|
| 查看次数: |
15337 次 |
| 最近记录: |