0

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()
4

1 に答える 1

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)
于 2012-06-29T18:25:18.273 に答える