如何禁用PyQt中的QTreeWidget中的右键单击?

时间:2015-07-09 05:46:22

标签: qt pyqt qt4 pyqt4

我有一个QTreeWidget,我想禁用右键单击该项目。目前我正在使用itemClicked信号来检测treeWidget的子项点击次数,但我只想在用户左键单击某个项目时执行某些操作,而在右键单击时不执行任何操作。左右点击现在都被检测到,我无法区分这两者。 提前谢谢!

3 个答案:

答案 0 :(得分:2)

您可以重新实现treewidget的mouse release event

class TreeWidget(QtGui.QTreeWidget):    
    def mouseReleaseEvent(self, event):
        if event.button() != QtCore.Qt.RightButton:
            super(TreeWidget, self).mouseReleaseEvent(event)

或在treewidget的视口中安装event-filter

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        ...
        self.tree = QtGui.QTreeWidget(self)
        self.tree.viewport().installEventFilter(self)

    def eventFilter(self, source, event):
        if (event.type() == QtCore.QEvent.MouseButtonRelease and
            event.button() == QtCore.Qt.RightButton and
            source is self.tree.viewport()):
            return True
        return super(Window, self).eventFilter(source, event)

答案 1 :(得分:1)

您可以覆盖MouseEvent:

void MyTreeWidget::mousePressEvent ( QMouseEvent * event )
{
   event->accept();
}

要保留Widget的常规行为,您必须为要使用的所有按钮调用基类。

void MyTreeWidget::mousePressEvent ( QMouseEvent * event )
{
   if(event->button() == Qt::RightButton)
       event->accept(); // accept event and do nothing
   else:
       QTreeView::mousePressEvent(event)
}

编辑:

刚刚注意到你正在使用Python:机制是相同的,所以如果翻译成Python,上面的例子应该有效。

答案 2 :(得分:0)

如果我正确地提示你,你想要禁用选择 我对PyQT并不熟悉,但在C ++中你应该编写如下代码:

yourtreeView->setSelectionMode(QAbstractItemView::NoSelection);

在这种情况下,项目不会被选中但你仍然会看到它们周围的焦点矩形。要解决此问题,您可以通过调用以下方法将小部件设置为不接受焦点:

yourtreeView->setFocusPolicy(Qt::NoFocus);