Pregunta

Desarrollo software de adquisición de imágenes. Quiero correr función de visualización en un hilo separado (para asegurar la visualización en directo para facilitar la captura de imágenes). Por ahora estoy de subclases QObject, la creación y el uso de la función de DisplayObject QThread :: moveToThread. El problema es que DisplayObject tiene que interactuar con interfaz gráfica de usuario (imágenes necesitan ser visualizado en objetos QGraphicsView). ¿Cuál es la mejor (y el más elegante) manera de hacer esto?

Mi solución actual:

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 se inicializa como a continuación:

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

Se me olvidó que admitir, que no funciona ...

¿Fue útil?

Solución

Se puede utilizar en QImage hilos no la interfaz de usuario. Esto permitiría que usted pueda hacer su captura / dibujo de una imagen. Una vez que una imagen está lista para ser visualizado, podría entonces emitir una señal con la imagen. Su elemento de interfaz de usuario debe tener una ranura conectada a la señal que lleva la imagen y refresca a sí mismo dada a dibujar esa imagen.

Mediante el uso de señales y ranuras, los datos deben ser transferidos de una manera segura para los subprocesos. Mediante el uso de QImages en los otros hilos, se puede dibujar, y la interfaz de usuario principal sólo es responsable de la actualización de las imágenes creadas, en lugar de gastar un montón de tiempo de procesarlas.

Otros consejos

En general, la interfaz gráfica de usuario es el hilo principal y cualquier trabajo se realiza en las discusiones de fondo.
Esto se debe a las principales necesidades de rosca a la manija del ratón, redibujado, eventos, etc. Iconifica

Lo bueno de Qt es que puede enviar señales entre ranuras / hilos.

de roscado en qt para una visión general.

También es una buena nueva avanzado Qt libro que las cubiertas en threadign detalle

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top