0

私がやりたいことは、QTableWidget の horizo​​ntalHeaders の上にマウスを置くたびに、QLable のテキストを変更することです。どうやってやるの?新しいヘッダーを作成するたびに、シグナルとヘッダーのインデックスが必要です。あなたの誰かがアイデアを持っていることを願っています。ヘッダーにカーソルを合わせるとヘッダーの背景が変わるため、関数が必要です。

4

1 に答える 1

2

QObject.installEventFilter() を使用して、 horizo​​ntalHeader()にイベント フィルターをインストールします。

class HeaderViewFilter(QObject):
    # ...
    def eventFilter(self, object, event):
        if event.type() == QEvent.HoverEvent:
            pass # do something useful
            # you could emit a signal here if you wanted

self. filter = HeaderViewFilter()
horizontalHeader().installEventFilter(self.filter)

これによりself.filter、必要なイベントが通知され、それに応じて対応できるようになります。

更新: HoverEvent は必要なものではないようです。ホバー イベントを取得するには、setAttribute を で呼び出す必要がありますQt::WA_Hover。この属性に関するドキュメントから:

マウスがウィジェットに出入りするときに、Qt にペイント イベントを生成させます。この機能は通常、カスタム スタイルを実装するときに使用されます。詳細については、スタイルの例を参照してください。

はい、そうです、ウィジェットに出入りしたときにのみイベントが生成されます。

すべての行またはすべての列に同じヘッダーが使用されるため、ウィジェット内でマウスがどこにあるかを実際に知る必要があります。マウスの移動を処理する新しいコードを次に示します。

class HeaderViewFilter(QObject):
    def __init__(self, parent, header, *args):
        super(HeaderViewFilter, self).__init__(parent, *args)
        self.header = header
    def eventFilter(self, object, event):
        if event.type() == QEvent.MouseMove:
            logicalIndex = self.header.logicalIndexAt(event.pos())
            # you could emit a signal here if you wanted

self.filter = HeaderViewFilter()
self.horizontalHeader = yourView.horizontalHeader()
self.horizontalHeader.setMouseTracking(1)
self.horizontalHeader.installEventFilter(self.filter)

上記のように、主な概念は引き続き適用されます。イベントを監視できるようにイベント フィルターが必要かQHeaderView、必要な情報を提供できるようにサブクラス化する必要があります。

于 2010-08-25T17:10:42.987 に答える