Вопрос
Я разрабатываю изображение 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 что охватывает подробную информацию