[英]Qt -> Set Value from Gui->Thread->Qtimer
我有一個特殊的相機課,應該盡可能多地打電話給他以獲取下一張照片。 gui本身包含一些滑塊,可用於更改相機參數和圖像輸出的設置。
這是我的班級的簡單結構:
class CameraWorker : public QObject
{
Q_OBJECT
public:
CameraWorker();
signals:
void imageReady(const QImage &);
private slots:
void onCamera();
void setValue(int value);
private:
Camera camera;
};
class CameraThread : public QThread
{
Q_OBJECT
public:
CameraThread();
signals:
void imageReady(const QImage &);
void gotValue(int value);
private slots:
void getImage(const QImage &img);
void setValue(int value);
private:
void run();
};
我的主窗口包含:
connect(ui.value, SIGNAL(valueChanged(int)), cameraThread, SLOT(setValue(int)));
我的相機線程包含:
void CameraThread::run()
{
CameraWorker worker;
QTimer timer;
connect(&timer, SIGNAL(timeout()), &worker, SLOT(onCamera()));
connect(&worker, SIGNAL(imageReady(const QImage &)), this, SLOT(getImage(const QImage &)));
connect(this, SIGNAL(gotValue(int)), &worker, SLOT(setValue(int)));
timer.start(0);
exec();
}
void CameraThread::setValue(int value)
{
emit gotValue(value);
}
我的相機工作人員包含:
void CameraWorker::setValue(value)
{
camera.setValue(value);
}
所以問題是,我必須調用Signal-> Slot-> Signal-> Slot-> camera.setValue才能為攝像機獲取一個值,但是我有20個值。 有什么更好的方法嗎?
您可以將20個值放入按值復制對象中。 這樣,您可以通過單個信號/插槽級聯快速通過它們。 不要忘記注冊您的自定義類型以用於排隊連接。
您可能要完全避免信號/插槽開銷。 您可以使用QSemaphore(在文檔中搜索“ Semaphores Example”)來編寫標准的生產者/消費者構造。
您還可以向線程發送一個自定義事件(包含您的數據),該事件應該比使用信號/插槽快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.