Domanda

Ho un QScrollArea paternità mio widget di impressionante scorrimento. Mi piace fare gli aggiornamenti sui contenuti in varie occasioni.

Per questo ho fatto un override di paintEvent(QPaintEvent *). Poi ogni volta che voglio che sia fatto io chiamo update() sul widget.

Problema: paintEvent() non viene mai chiamato da questo

Quello che ho cercato nella risoluzione dei problemi finora:

  • Usa repaint() invece di update(). Dovrebbe chiamare instantanously. Purtroppo non.
  • Prova per isVisible() e updatesEnabled
  • Prova wether mia esclusione è corretta. Ridimensionamento della finestra chiama la mia funzione. Solo il mio aggiornamento manuale (), ridipingere () chiamate sicuro.
  • Implementare una QTimer per innescare update () o ridipingere () ogni 500ms. Il trigger dà output di testo, la funzione non viene chiamata.

Qualcuno ha un'idea di cosa controllare dopo? Che cosa potrebbe fare repaint () non chiamare paintEvent ()?

È stato utile?

Soluzione

La soluzione è quella di chiamare this->viewport()->repaint() o this->viewport()->update() dalla classe derivata QAbstractScrollArea invece di repaint() o update().

Maggiori informazioni sono contenute nella Qt documentazione :

  

QWidget * QAbstractScrollArea::viewport () const

     

Restituisce il widget di viewport.   Utilizzare la funzione QScrollArea::widget() per recuperare il contenuto del widget finestra.

Dato che i contenuti che abbiamo nel nostro classe derivata QAbstractScrollArea verrà visualizzato nel widget viewport, ha senso chiamare aggiornamento del widget viewport o ridipingere per disegnare di nuovo i nostri dati (abbiamo la nostra paintEvent chiamato).

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