Domanda

Sto sviluppando un'immagine software di acquisizione. Voglio correre funzione di visualizzazione in un thread separato (per garantire live view per una facile acquisizione di immagini). Per ora sto sottoclasse QObject, creando DisplayObject e utilizzare la funzione QThread :: moveToThread. Il problema è che DisplayObject deve interagire con interfaccia grafica (le immagini devono essere visualizzati negli oggetti QGraphicsView). Qual è il migliore (e più elegante) modo per fare questo?

La mia soluzione attuale:

class DisplayObject : public QObject
{
    Q_OBJECT
    public:
        inline void addDetectorSystem(cci::PGR* system);
        inline void connectGui(ImageAquisition* gui);

    public slots:
        void display();

    private:
        cci::PGR* camSystem;
        ImageAquisition* guiClass;
};

DisplayObject viene inizializzato come di seguito:

  DisplayObject Displayer;
        Displayer.addDetectorSystem(PGRSystem);
        Displayer.connectGui(this);
        QThread thread;
        Displayer.moveToThread(&thread);
        connect(this, SIGNAL(display()), &Displayer, SLOT(display()));
        thread.start();

Ho dimenticato di ammettere, che non funziona ...

È stato utile?

Soluzione

È possibile utilizzare QImage in discussioni non UI. Ciò permetterà di fare la cattura / disegno a un'immagine. Una volta che l'immagine è pronta per essere visualizzata, si potrebbe quindi emettere un segnale con l'immagine. Vostro elemento UI deve avere una fessura collegato a quel segnale che prende l'immagine data e si aggiorna disegnare quella immagine.

Utilizzando segnali e slot, i dati devono essere trasferiti in un modo thread-safe. Utilizzando QImages negli altri thread, è possibile disegnare, e l'utente principale è responsabile solo per l'aggiornamento delle immagini create, invece di spendere un sacco di tempo loro elaborazione.

Altri suggerimenti

In generale l'interfaccia grafica è il filo conduttore e qualsiasi lavoro è fatto in thread in background.
Questo perché i bisogni principali thread per il mouse maniglia, ridisegno, eventi Iconifica etc

La cosa bella di Qt è che è possibile inviare slot / segnali tra i thread.

filettatura in qt per una panoramica.

C'è anche una buona nuova avanzato Qt libro che copre threadign in dettaglio

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