Вопрос

Я разрабатываю изображение Aquisition Software. Я хочу запустить функцию отображения в отдельном потоке (чтобы обеспечить просмотр просмотра захвата изображения). На данный момент я подклассный Qobject, создавая DisplayObject и использование функции QTHREAD :: MOVETORTREAD. Проблема заключается в том, что 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 инициализируется, как показано ниже:

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

Я забыл признать, что это не работает ...

Это было полезно?

Решение

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

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

Другие советы

Как правило, GUI является основной нитью, а любая работа выполняется в фоновых потоках.
Это потому, что основной нить нужно обрабатывать мышь, RedRaw, Iconify Events etc

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

Видеть резьба в квартале Qt. Для обзора.

Есть также хороший новый Усовершенствованная книга Qt что охватывает подробную информацию

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top