Domanda

Ho un QMainWindow con tre widget all'interno che vengono promossi a una classe che contiene un QThread sottoclasse. Essi ogni estrazione su un QImage locale nel loro qthread rexpective che viene inviato un segnale una volta la sua disegnata e poi reso chiamando update (esempio Mandlebrot) dallo slot. È questo sicuro o pericoloso? Essi non condividono alcun dato, almeno nessuno che io sono la generazione e chiedo quali sono i dati che potrebbero essere di condivisione che è al di fuori della mia fascia di codifica vale a dire che viene generato da Qt automaticamente.

È stato utile?

Soluzione

la documentazione :

QPainter può essere utilizzato per dipingere su dispositivi vernice QImage, QPrinter e QPicture. Pittura su QPixmaps e QWidgets non è supportato. In Mac OS X la finestra automatica progresso non verrà visualizzato se si stampa da fuori filo GUI.

Qualsiasi numero di thread può verniciare in qualsiasi momento, tuttavia solo un thread alla volta può dipingere in un dato dispositivo vernice. In altre parole, due fili possono dipingere allo stesso tempo se ciascuno vernici Onto QImages distinte, ma i due fili non può dipingere sullo stesso QImage allo stesso tempo.

Si noti che su sistemi X11 senza supporto FontConfig, Qt non può rendere al di fuori del testo del filo GUI. È possibile utilizzare la funzione QFontDatabase :: supportsThreadedFontRendering () per rilevare se il rendering dei font può essere utilizzato al di fuori del filo GUI.

Quindi, fintanto che si sta attenti in merito alla questione di carattere su X11, non utilizzare alcun pixmap o cursori (che sono implementate come pixmap), e non si tenta di vernice sulla stessa immagine, allo stesso tempo da più thread ... dovrebbe funzionare.

Si noti che nell'esempio Mandelbrot, il QImage è passato dal valore nel segnale (implicitamente comune), il che significa che se entrambi i tentativi di thread una scrittura otterrà la propria copia.

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