6

チェックボックスのみである(およびチェックボックスではない)列がいくつかあるQTableWidgetがあります。ユーザーが「チェックボックスのみ」列に関連するヘッダー項目を右クリックすると、「すべてチェックを外す」または「すべてチェックする」オプションが表示されるように、機能を実装しようとしています。

これまでのところ、customContextMenu次のシグナルを介してを実装することができました。

self.headers = self.tblData.horizontalHeader()
self.headers.setContextMenuPolicy(Qt.CustomContextMenu)
self.headers.customContextMenuRequested.connect(self.show_header_context_menu)
self.headers.setSelectionMode(QAbstractItemView.SingleSelection)

これにより、次のコンテキストメニュー呼び出しが発生します。

def show_header_context_menu(self, position):
    menu = QMenu()
    deselect = menu.addAction("Clear Checked")
    ac = menu.exec_(self.tblData.mapToGlobal(position))
    if ac == deselect:
        pass
        #Actually do stuff here, of course

これによりコンテキストメニューがポップアップしますが、右クリックしたヘッダーのインデックスを取得する方法が見つかりません。self.headers.selectedIndexes()同様に試しましself.headers.currentIndex()たが、これらは実際のテーブルの選択にのみ関連しているようで、ヘッダーには関連していないようです。

右クリックされたヘッダーインデックスを取得できたら、適切なインデックスが選択されている場合にのみ表示されるようにメニューを簡単に制限できます(チェックボックスのみの列)。これは実際には追加のことです。

私は何が欠けていますか?助けてくれてありがとう。

4

2 に答える 2

6

customContextMenuRequestedシグナルは、コンテキストメニューイベントの位置をとして送信しますQPoint。便利なことに、テーブルのヘッダーには、それを直接利用できるlogicalIndexAtのオーバーロードがあるため、次のようにするだけで済みます。

def show_header_context_menu(self, position):
    column = self.headers.logicalIndexAt(position)
于 2012-08-10T00:12:58.277 に答える
1
于 2012-08-09T17:28:15.037 に答える