我有关注星座:
带有MainWindow
另一个本质上是 CameraManager
的线程...每次添加/删除相机时,MainWindow
都会被告知。
大致看起来像这样:
MainWindow源自ICameraAddedConsumer
MainWindow
实现ConsumeCameraAdded
并在此功能中创建小部件。它订阅了ITSELV作为CameraManager
添加新相机时,摄像头拨打所有消费者的ConsumeCameraAdded
(MainWindow
)。
问题在于,摄影师生活在另一个线程中,QT显然会抱怨这一点,因为一个小部件不是与MainWindow相同的线程创建的。
。有什么建议我如何解决?
根据注释,使用不同线程中的qobjects之间的信号/插槽应处理"自动化"的问题。
否则,假设MainWindow/ICameraAddedConsumer
是QObject
,一个想法可能是使用以下内容:
QMetaObject::invokeMethod(consumer, "ConsumeCameraAdded", Qt::QueuedConnection, ...)
其中consumer
是MainWindow/ICameraAddedConsumer
实例的指针。
有QWaitCondition
,但我不确定在这种情况下这是否有意义(尽管我想可以改编它)。
否则...请勿在ConsumeCameraAdded()
中创建小部件,而要设置一些标志(并返回),然后使用QTimer
或QObject::timerEvent()
定期检查标志并在设置该标志时创建窗口小部件。不幸的是,我很确定您由于线程问题而无法在ConsumeCameraAdded()
本身中创建或启动计时器。