1

このフォーラムの訪問者の助けを借りて、QListWidgetでカスタムコンテキストメニューを作成しました。ここで、ユーザーがウィジェットを右クリックしたが、マウスがどのアイテムの上にもなかったときにメニューが表示されるという問題を解決しようとしています。このような状況が発生した場合、メニューが表示されないようにします。明らかな状態について考えていました。ウィジェット内のアイテムの上にマウスを置いていますか?しかし、私はこれを行う方法がわかりません。すべての答えを事前にありがとう:)

4

1 に答える 1

4

現在コンテキストメニューを作成している方法が表示されないため、最初から想定します...

  1. ウィジェットのcontextMenuPolicyQt::CustomContextMenuに設定します

  2. ウィジェットcustomContextMenuRequestedシグナルを、カスタム メニューを表示するスロットに接続します。

  3. スロットは、ローカル ウィジェット座標で QPoint を受け取ります。この QPoint を使用して、QListWidget.itemAt(QPoint)でそのポイントの下にあるアイテムを見つけることができます。その後、そのポインターを検証できます。それが有効なアイテムである場合は、その時点でメニューを表示します (または、あなたに合ったオフセット)。有効な項目とは、null 以外のポインターを意味します。

これは、PyQt でどのように見えるかの例です。これをQtに翻訳できます

class Widget(QtGui.QWidget):

    def __init__(self,parent=None):
        super(Widget, self).__init__(parent)

        self.list = QtGui.QListWidget()
        self.list.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        self.list.customContextMenuRequested.connect(self.handleContext)

        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.list)

        self.list.addItems(["one", "two"])

    def handleContext(self, pos):
        item = self.list.itemAt(pos)
        if item is not None:
            menu = QtGui.QMenu("Context Menu", self)
            menu.addAction("FOO")
            ret = menu.exec_(self.list.mapToGlobal(pos))

PyQt4 では、指定された位置の項目が の場合、Noneそれは空白でした。Qt では、null ポインターにする必要があります。

于 2012-11-24T00:26:07.680 に答える