このフォーラムの訪問者の助けを借りて、QListWidgetでカスタムコンテキストメニューを作成しました。ここで、ユーザーがウィジェットを右クリックしたが、マウスがどのアイテムの上にもなかったときにメニューが表示されるという問題を解決しようとしています。このような状況が発生した場合、メニューが表示されないようにします。明らかな状態について考えていました。ウィジェット内のアイテムの上にマウスを置いていますか?しかし、私はこれを行う方法がわかりません。すべての答えを事前にありがとう:)
質問する
1082 次
1 に答える
4
現在コンテキストメニューを作成している方法が表示されないため、最初から想定します...
ウィジェットcustomContextMenuRequestedシグナルを、カスタム メニューを表示するスロットに接続します。
- スロットは、ローカル ウィジェット座標で 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 に答える