QThread взаимодействие с GUI - PullRequest
       16

QThread взаимодействие с GUI

0 голосов
/ 25 октября 2010

Я занимаюсь разработкой программного обеспечения для получения изображений.Я хочу запустить функцию отображения в отдельном потоке (чтобы обеспечить просмотр в реальном времени для удобного захвата изображения).Сейчас я создаю подкласс QObject, создаю DisplayObject и использую функцию QThread :: moveToThread.Проблема в том, что DisplayObject должен взаимодействовать с GUI (изображения должны отображаться в объектах QGraphicsView).Каков наилучший (и самый элегантный) способ сделать это?

Мое текущее решение:

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 инициализируется так:*

Ответы [ 2 ]

2 голосов
/ 26 октября 2010

Вы можете использовать QImage в не-пользовательских потоках. Это позволит вам сделать ваш захват / рисунок на изображение. Как только изображение готово к отображению, вы можете испустить сигнал с изображением. Ваш элемент пользовательского интерфейса должен иметь слот, связанный с этим сигналом, который берет данное изображение и обновляется, чтобы нарисовать это изображение.

При использовании сигналов и слотов данные должны передаваться потокобезопасным способом. Используя QImages в других потоках, вы можете рисовать, а основной пользовательский интерфейс отвечает только за обновление созданных изображений, а не тратит много времени на их обработку.

1 голос
/ 25 октября 2010

Обычно GUI является основным потоком, а любая работа выполняется в фоновых потоках.
Это потому, что основной поток должен обрабатывать события мыши, перерисовки, пиктограммы и т. Д.

Хорошая вещь в Qtчто вы можете отправлять слоты / сигналы между потоками.

См. threading в qt для обзора.

Существует также хорошая новая расширенная книга Qt подробно описывает нить

...