【问题标题】:Qt Ignore Right Click in QItemSelectionModelQt忽略QItemSelectionModel中的右键单击
【发布时间】:2012-06-22 23:17:07
【问题描述】:

是否可以检测从 QItemSelectionModel 中单击了哪个鼠标按钮?

我想阻止鼠标右键单击更改选择。

我用的是QTreeWidget,所以如果有办法掩盖整个事情,那就太好了,但是右键单击仍然用于上下文菜单,所以我没有追求这种思路.

仍在尝试……我偶然发现了这个,但我无法让函数运行:http://qt-project.org/faq/answer/how_to_prevent_right_mouse_click_selection_for_a_qtreewidget 这意味着一个简单的覆盖,但这在 Python 中不起作用

def mousePressEvent(self, mouse_event):
    super(MyTreeWidget, self).mousePressEvent(mouse_event)
    print "here %s" % event.type()

【问题讨论】:

    标签: qt mouseevent qtreeview qtreewidget selectionmodel


    【解决方案1】:

    这感觉像是另一种解决方法,但我得到了它的工作。在这个例子中,SelectionModel 也是一个事件过滤器,它从 QTreeWidget 的 viewport() 中获取鼠标点击事件

    另见:

    (希望我没有遗漏任何内容,因为我是即时破解的,而我的实际实现要复杂一些,并使用单独的事件过滤器。)

    from PyQt4.QtGui import QItemSelectionModel
    from PyQt4.QtCore import QEvent
    from PyQt4.QtCore import Qt
    
    # In the widget class ('tree' is the QTreeWidget)...
        # In __init___ ...
            self.selection_model = CustomSelectionModel(self.tree.model())
            self.tree.viewport().installEventFilter(self.selection_model)
    
    # In the selection model...
    class CustomSelectionModel(QItemSelectionModel):
        def __init__(self, model):
            super(CustomSelectionModel, self).__init__(model)
            self.is_rmb_pressed = False
    
        def eventFilter(self, event):
            if event.type() == QEvent.MouseButtonRelease:
                self.is_rmb_pressed = False
            elif event.type() == QEvent.MouseButtonPress:
                if event.button() == Qt.RightButton:
                    self.is_rmb_pressed = True
                else:
                    self.is_rmb_pressed = False
    
        def select(self, selection, selectionFlags):
            # Do nothing if the right mouse button is pressed
            if self.is_rmb_pressed:
                return
    
            # Fall through. Select as normal
            super(CustomSelectionModel, self).select(selection, selectionFlags)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多