Domanda

quello che voglio fare è quello di modificare il testo di un QLable, ogni volta che passa con il mouse sopra le horizontalHeaders della mia QTableWidget. Come posso fare ciò? Ogni volta che ho più di un nuovo header ho bisogno di un segnale e l'indice della testata. Spero che qualcuno di voi ha un'idea. Ci deve essere una funzione, perché se si passa sopra le intestazioni, sullo sfondo dei cambiamenti di intestazione.

È stato utile?

Soluzione

Installare un filtro eventi che sul horizontalHeader () utilizzando QObject.installEventFilter () :

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)

Con self.filter a posto, riceverai una notifica degli eventi necessari e può rispondere di conseguenza.

Aggiorna : sembra HoverEvent non è proprio quello che ci serve. Al fine di ottenere gli eventi hover, è necessario setAttribute deve essere chiamato con Qt::WA_Hover . Dalla documentazione su questo attributo:

  

Forze Qt per generare eventi di vernice quando il mouse entra o esce il widget. Questa funzione è in genere utilizzato in sede di attuazione stili personalizzati; vedere l'esempio di stili per i dettagli.

Quindi sì, genera eventi solo quando si entra o si lascia il widget .

Dal momento che la stessa intestazione viene utilizzato per tutte le righe o tutte le colonne, saremo in realtà vogliono conoscere dove il mouse si trova all'interno del widget. Ecco qualche nuovo codice che dovrebbe gestire mouse si muove:

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)

Come si può vedere sopra, il concetto principale si applica ancora. Abbiamo entrambi bisogno di un filtro eventi in modo che possiamo guardare per eventi o abbiamo bisogno di sottoclasse QHeaderView in modo che ci fornirà le informazioni necessarie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top