Ho la seguente UI, in cui è mostrato il sonogramma (freq + rappresentazione del suono orario). Quindi l'immagine non viene caricata da qualche parte, viene disegnata da QPainter
durante la lettura del file WAV
.Come far scorrere efficacemente l'immagine 1024x90000 in una finestra?
Il mio attuale implementazione è un unico enorme QImage
oggetto, in cui viene disegnato l'immagine. E su paintEvent()
, ne traggo parte del grande QImage
sul widget:
QPainter painter(this);
// (int, int, QImage*, int, int)
painter.drawImage(0, 0, *m_sonogram, 0, m_offset);
Ma, che io sappia, il QPixmap
è ottimizzato per la visualizzazione di mappe di pixel sullo schermo, quindi dovrei convertire il QImage
ad un QPixmap
dopo la il disegno dell'ecografia è fatto?
Inoltre, vale la pena di mantenere grande immagine come una sorta di una lista concatenata di separati QPixmap
oggetti di dimensioni più piccole e fare paintEvent()
più intelligente di operare su un elenco di oggetti più piccoli per evitare le procedure di auto-taglio di Qt e così via?
Quando il mio QImage è sufficientemente grande, ogni paintEvent()
consuma molto CPU
.
Tutti i tipi di consigli sono i benvenuti :)
Forse postare qualcosa sulle macchine su cui si vuole che questo venga eseguito. L'uso dell'elenco collegato potrebbe essere intelligente a seconda delle macchine di destinazione. – EKS
Forse mi sbaglio, ma sembra che tu abbia disegnato l'intera immagine ogni evento pittorico. Puoi dipingere solo la parte dell'immagine che stai visualizzando sul viewport. Questo dovrebbe mantenere costante il consumo di CPU. – Masci
@Masci: consultare la nota "Clipping automatico" nei documenti di QPaintEvent: Qt esegue questa operazione automaticamente e non è necessario copiare esplicitamente alcuno stato di ritaglio QPaintEvent sul QPainter. – timday