Frage

Ich entwickle Bildaufnahme-Software. Ich möchte Anzeigefunktion in einem separaten Thread ausgeführt werden (zum Live-Ansicht für die einfache Bildaufnahme zu gewährleisten). Ich QObject Vorerst bin Subklassen, die Schaffung Display und mit QThread :: moveToThread Funktion. Das Problem ist, dass Display mit GUI zur Interaktion hat (Bilder müssen in QGraphicsView Objekte angezeigt werden). Was ist die beste (und die eleganteste) Weg, dies zu tun?

Meine aktuelle Lösung:

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;
};

wird Display wie unten initialisiert:

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

Ich habe vergessen, zugeben, dass es nicht funktioniert ...

War es hilfreich?

Lösung

Sie können QImage verwenden in nicht-UI-Threads. Dies würde ermöglichen es Ihnen, Ihre Capture / Zeichnung zu einem Bild zu tun. Sobald ein Bild fertig ist angezeigt werden, können Sie dann ein Signal mit dem Bild emittieren. Ihr UI-Element einen Schlitz auf dieses Signal angeschlossen haben sollte, die die gegebene Bild und erfrischt selbst nehmen das Bild zu zeichnen.

durch Signale und Slots verwenden, sollten die Daten in einem Thread-sichere Weise übertragen werden. Durch QImages in den anderen Threads verwenden, können Sie zeichnen, und die Haupt-UI ist nur verantwortlich für die erzeugten Bilder zu aktualisieren, anstatt viel Zeit zu verbringen, sie zu verarbeiten.

Andere Tipps

Im Allgemeinen ist die GUI ist der Haupt-Thread und jede Arbeit im Hintergrund Fäden getan.
Dies liegt daran, die Haupt-Thread Bedürfnisse Griff Maus, Neuaufbau, Iconify Veranstaltungen etc

Das Schöne an Qt ist, dass Sie Slots / Signale zwischen Threads senden.

Siehe Einfädeln in qt für einen Überblick.

Es gibt auch eine gute neue erweiterte Qt Buch dass Abdeckungen threadign in Detail

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top